ホームページ >バックエンド開発 >C++ >STL priority_queue の基礎となるコンテナにアクセスするにはどうすればよいですか?

STL priority_queue の基礎となるコンテナにアクセスするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 06:21:02582ブラウズ

How can I access the underlying container of an STL priority_queue?

STL コンテナ アダプタの基礎となるコンテナへのアクセス

標準テンプレート ライブラリ (STL) は、stack、queue、priority_queue などのコンテナ アダプタを提供します。これは、基礎となるコンテナ上に抽象化されたレイヤーを提供しながら、便利なインターフェイスを提供します。ただし、これらのアダプタには、基礎となるコンテナにアクセスするための標準化されたメソッドがありません。

現在の実装

Microsoft の Visual など、STL の一部の実装ではStudio 2008 では、_Get_container() と呼ばれる非標準メソッドがスタックとキューで使用できます。ただし、priority_queue にはそのようなメソッドは存在しません。

priority_queue の基になるコンテナへのアクセス

標準的なメソッドがないにもかかわらず、回避策が考案されています。

<code class="cpp">template <class T, class S, class C>
S&amp; Container(priority_queue<T, S, C>& q) {
    struct HackedQueue : private priority_queue<T, S, C> {
        static S&amp; Container(priority_queue<T, S, C>& q) {
            return q.*&amp;HackedQueue::c;
        }
    };
    return HackedQueue::Container(q);
}</code>

このコードは、ネストされたプライベート クラス HackedQueue を利用して基礎となるコンテナー c にアクセスするヘルパー関数 Container() を定義します。

使用法

回避策として、次のように priority_queue の基礎となるコンテナにアクセスできます。

<code class="cpp">priority_queue<SomeClass> pq;
vector<SomeClass>& tasks = Container(pq);</code>

公式ドキュメント

STL の公式ドキュメントは、次のリンクにあります。

  • [C : 標準テンプレート ライブラリ](https://ja.cppreference.com/w/cpp/container)

結論

STL コンテナ アダプタの基になるコンテナにアクセスする標準的な方法はありませんが、提供されている回避策は、特に priority_queue に対する解決策を提供します。スタックとキューについては、利用可能な場合は非標準の _Get_container() メソッドを利用できます。

以上がSTL priority_queue の基礎となるコンテナにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。