2016-05-18 6 views
0

私がプロジェクトにPRIORITY_QUEUE年代を使用していた、と私は初期化のためにファンクタを使用することにしましたが、インターネット上で見て、私はこれを見つけましたなぜstd::vector<int>がそこに使用され、の下にある容器がどのように管理されているのか(私は情報を探しましたが、私は考えていません)下にある容器は何ですか?私はすでにそれを使用して動作しますが、私は本当にないんだけど</p> <pre><code>std::priority_queue<int, std::vector<int>, std::greater<int> > pq; </code></pre> <p>:

+4

[Documentation](http://en.cppreference.com/w/cpp/container/priority_queue)は役に立ちませんか? – NathanOliver

+1

'priority_queue'は何らかの形でデータを保存する必要があり、' vector'を使います。また、要件を満たす 'list'などを使用することもできます。これらの基本的なコンテナは決して管理しません。 'priority_queue'はそれを行います。 – nwp

答えて

6

std::priority_queueは実際にはコンテナではなく、コンテナアダプタです。つまり、コンテナをとり、別のインターフェイスを構築します。

下位のコンテナは、当然これに適応するコンテナです。 C++テンプレートマジックを使用すると、std::vectorstd::dequeに変更することができ、すべてがうまくいくでしょう。使用するどのようなコンテナについて

std::dequestd::vectorの同じ原理が適用されます:std::priority_queue部分は値が含まれていない、それだけで独特の方法でそれらを提示します。

+0

しかし、priority_queueはヒープとして実装されていませんでしたか?なぜベクトルを使うのですか?私は何かが恋しいと思っています... –

+0

@FranciscoGallegoSalido、それはヒープとして実装されていますが、ヒープの内容はどこに保存されていると思いますか?彼らはどこかに保存しなければならない、彼らはあなたのコンピュータの中に魔法のように浮かんでいるだけではありません。 –

+1

@FranciscoGallegoSalido:通常、ヒープは、線形リスト内のオブジェクトを見る方法として実装されています。たとえば、どのようなコンテナでもこのようなヒープを構築する 'std :: make_heap()'関数を見てください。 – rodrigo

1

これは、優先キューデータ構造がベクトルを使用して値を保持していることを示しています。これは、大きな値のメソッドを使用してソートされています。その結果、高い値が最初に表示され、順番に減少します。

意味がある場合は別のデータ構造を使用できますが、この場合はベクトルを使用することを選択しました。

関連する問題

 関連する問題