我想知道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;
}
感谢。
答案 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/