什么时候std :: priority_queue<>排序本身?

时间:2011-10-18 01:18:59

标签: c++ algorithm stl computer-science priority-queue

我想知道C ++ STL priority_queue何时排序。我的意思是当您insert项目进入时,push会将其peek置于正确的位置,或者当您pop或{{1}时,它会自行排序并为您提供最高优先级的项目} 出来?我问这个是因为我的priority_queue<int>将包含一个可能有值更新的数组的索引,我希望它在我pq.top();时更新。

#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;
}

感谢。

3 个答案:

答案 0 :(得分:10)

工作在push()pop()期间完成,它调用底层堆修改函数(push_heap()pop_heap())。 top()需要一段时间。

答案 1 :(得分:1)

当插入新元素或删除现有元素时,它会自行排序。 This might help

答案 2 :(得分:0)

std :: priority_queue :: push /(和emplace)方法会在堆中产生有效的重新排序。

http://www.cplusplus.com/reference/queue/priority_queue/emplace/