2011-10-18 6 views
5

私はC++ STL priority_queueがいつソートするのだろうと思っていました。 peekまたはpopが出たら、それはpushの項目を入れて、それともそれを並べ替えて優先度の高い項目を与えるのですか?insertpriority_queue<int>には、値の更新を行う可能性のある配列のインデックスが含まれており、pq.top();を実行したときに更新する必要があるため、これを求めています。std :: priority_queue <>はいつソートされますか?

#include <cstdio> 
#include <algorithm> 
#include <queue> 
using namespace std; 

int main() { 
    priority_queue<int> pq; 
    pq.push(2); 
    pq.push(5); //is the first element 5 now? or will it update again when I top() or pop() it out? 
    return 0; 
} 

ありがとうございます。

+0

'map'のように、それは比較述語を取るので、あなたは、簡単にこれらのプロパティを発見することができます。各比較時に(例えば)コンソールに出力する比較述語を指定すると、呼び出された時点(およびその値に基づいて)が表示されます。 –

答えて

10

作業は、基礎となるヒープ変形関数(push_heap()pop_heap())を呼び出しpush()pop()、中に行われます。 top()は一定の時間がかかります。

+0

驚くばかりです、私が聞きたかったのです。時間制限がなくなると、これを答えとしてマークします。 –

+1

例[here](http://www.sgi.com/tech/stl/priority_queue.html)は、実際の動作を実証しています。 –

+0

@StanleyCen:喜んで助けてもらえました。 ](http://www.cplusplus.com/reference/stl/priority_queue/pop/)... –

1

新しい要素が挿入されるか、既存の要素が削除されると、ソートされます。 This might help

関連する問題