STL で十分に機能すると思われるアプリケーション (C++) がありますpriority_queue
。 ドキュメントには次のように記載されています。
Priority_queue はコンテナー アダプターです。つまり、基になるコンテナー タイプの上に実装されます。デフォルトでは、基になる型は vector ですが、別の型を明示的に選択することもできます。
と
プライオリティ キューは標準的な概念であり、さまざまな方法で実装できます。この実装はヒープを使用します。
私は以前、それが であり、それが(最初に を選択した 2 つの理由) であると想定していましたが、ドキュメントではこの仮定を確認も否定もしていません。top()
O(1)
push()
O(logn)
priority_queue
さらに深く掘り下げると、シーケンスの概念に関するドキュメントには次のように書かれています。
単一要素の挿入と消去の複雑さは、シーケンスに依存します。
は(デフォルトで) をヒープとしてpriority_queue
使用します。vector
... 要素へのランダム アクセス、最後に要素を一定時間挿入および削除する機能、および最初または途中で要素を線形時間挿入および削除する機能をサポートします。
priority_queue
デフォルトを使用して、top()
isO(1)
およびpush()
isであると推測していますO(n)
。
質問 1:これは正しいですか? (top()
アクセスはO(1)
ありpush()
ますO(n)
か?)
質問 2:の実装に(または) の代わりに(または)を使用した場合、O(logn)
効率を上げることができますか? これを行うと、どのような結果が生じるでしょうか。結果として、他にどのような操作が影響を受けるでしょうか?push()
set
multiset
vector
priority_queue
NB: ここで気になるのは時間効率であって、スペースではありません。