2011-10-18 4 views
5

언제 C++ STL priority_queue이 자체 정렬되는지 궁금합니다. 내 말은 insertpush 항목을 넣었을 때 올바른 위치에 넣었습니까? 아니면 peek 또는 pop 일 때 항목을 정렬하고 가장 우선 순위가 높은 항목을 제공합니까? 내 priority_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

당신은 쉽게 그 특성을 발견 할 수 있습니다. 비교할 때마다 (예를 들어) 콘솔에 출력하는 비교 술어를 제공하면, 호출 될 때 (그리고 어떤 값으로) 살아남을 수 있습니다. –

답변

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.

관련 문제