在了解priority_queue(优先队列)前,可以先去瞅瞅queue,下面是传送门啦>——<
priority_queue的基本性能
class priority_queue<>实现出一个queue,只不过其中的元素依照优先级被读取。priority_queue的接口与queue非常相近,只不过在插入元素后priority_queue会自动为元素排序,默认排序是operator <形成降序排列,也就是说,队首的元素默认是最大的元素,我们在弹出元素时,就会弹出最大的那个元素。值得注意的是,如果同时存在若干个数值最大的元素,我们无法确知究竟哪一个会入选。
priority_queue使用须知
1.包含头文件
#include<queue>
2.在头文件<queue>中,class priority_queue 定义如下
namespace std
{
template <typename T,
typename Container = vector<T>
typename Compare = less<typename Container::value_type>>
class priority_queue;
}
第一个template参数是元素类型,带有默认值的第二个template参数定义了priority_queue内部用来存放元素的容器,默认容器为vector,带有默认值的第三个template参数定义出“用以查找下一个最高优先级元素”的排序准则,默认以operator<作为比较标准。
但实际上,你可以用任何sequence容器支持priority_queue,只要他们支持random-access iterator和front()、push_back()、pop_back()等操作就行。由于priority_queue用到了STL heap算法,所以容器必须支持random-access。
priority_queue核心操作
1.核心接口成员函数
push() //将一个元素放入priority_queue中
top() //返回priority_queue的一个队首元素,但是不删除它
pop() //删除priority_queue的一个队首元素,但是不返回它
2.建立一个升序排序准则的priority_queue
priority_queue<int,vector<int>,greater<int> > pq; //建立一个容器为vector名为 pq 的 priority_queue
3.priority_queue的具体操作
#include<iostream>
#include<queue> //必不可少的头文件们
using namespace std;
int main()
{
//创建一个容器为string的优先队列
priority_queue<string> pq1;
//插入三个字符串
pq1.push("AWSL");
pq1.push("WSND");
pq1.push("NMSL");
//打印优先队列
cout << "priority_queue pq1:" << endl;
cout << "now pq1.size is: ";
cout << pq1.size() << endl;
cout << "从队首开始弹出pq1的元素" << endl;
cout << pq1.top() << endl;
pq1.pop();
cout << pq1.top() << endl;
pq1.pop();
cout << pq1.top() << endl;
pq1.pop();
cout << "now pq1.size is: ";
cout << pq1.size() << endl;
cout << endl;
//-----------------------------------
//创建一个容器默认但是排序准则为升序的优先队列
priority_queue<int, vector<int>, greater<int> > pq2;
//插入三个数字
pq2.push(4396);
pq2.push(777);
pq2.push(250);
//打印优先队列
cout << "priority_queue pq2:" << endl;
cout << "now pq2.size is: ";
cout << pq2.size() << endl;
cout << "从队首开始弹出pq2的元素" << endl;
cout << pq2.top() << endl;
pq2.pop();
cout << pq2.top() << endl;
pq2.pop();
cout << pq2.top() << endl;
pq2.pop();
cout << "now pq2.size is: ";
cout << pq2.size() << endl;
}
本文留下了一个小bug,等待初学者自己去发现哟,嘻嘻嘻/*-*