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& Container(priority_queue<T, S, C>& q) { struct HackedQueue : private priority_queue<T, S, C> { static S& Container(priority_queue<T, S, C>& q) { return q.*&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 の公式ドキュメントは、次のリンクにあります。
結論
STL コンテナ アダプタの基になるコンテナにアクセスする標準的な方法はありませんが、提供されている回避策は、特に priority_queue に対する解決策を提供します。スタックとキューについては、利用可能な場合は非標準の _Get_container() メソッドを利用できます。
以上がSTL priority_queue の基礎となるコンテナにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。