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

Mary-Kate Olsen
リリース: 2024-11-01 06:21:02
オリジナル
495 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!