本文中的一些重要概念摘自C语言中文网
链接:http://c.biancheng.net/view/396.html
queue其实就是队列,队列这种数据结构我们也在数据结构课程中学过了,它就是一种“先进先出”的数据结构,跟我们平时排队时的情况一样(文明,不插队)。queue也有push pop top等成员函数,但是与stack不同的是,queue的push操作是在队尾进行的,而queue的pop和top操作是在队头进行的。
同样使用queue时要包含头文件queue
priority_queue 是“优先队列”。它和普通队列的区别在于,优先队列的队头元素总是最大的——即执行 pop 操作时,删除的总是最大的元素;执行 top 操作时,返回的是最大元素的引用。
在默认情况下,要放入 priority_queue 的元素必须是能用“<”运算符进行比较的,而且 priority _queue 保证以下条件总是成立:对于队头的元素 x 和任意非队头的元素 y,表达式“x<y”必为 false。
和 set/multiset 不同,priority_queue 是使用“堆排序”技术实现的,其内部并非完全有序,但却能确保最大元素总在队头。因此,priority_queue 特别适用于“不停地在一堆元素中取走最大的元素”这种情况。priority_queue 插入和删除元素的复杂度都是 O(log(n))。虽然用 set/multiset 也能完成此项工作,但是 priority_queue 比它们略快一些。
priority_queue 队头的元素只能被查看或者修改,不能被删除。
以下是priority_queue的测试程序:
#include<iostream>
#include<queue>
using namespace std;
int main()
{
priority_queue<int> pq;
pq.push(10);
pq.push(20);
pq.push(30);
pq.push(115);
pq.push(100);
pq.push(11);
while(!pq.empty())
{
cout << pq.top() << endl;
pq.pop();
}
return 0;
}测试程序输出结果:
本节完

京公网安备 11010502036488号