本文中的一些重要概念摘自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;
}

测试程序输出结果:
图片说明

本节完