在C++中,priority_queue优先队列将优先级高的元素排在前面。例如:
priority_queue<int> q;
定义了一个元素越大优先级越高的队列(大顶堆),当然这是默认值,标准写法是
priority_queue<int,vector<int>,less<int> >
注意:
1.不用写#include <vector>,这里vector只是一个容器,当然要写#include <queue>。
2.优先队列是元素进入时就已经按优先级排序了,而不是只有访问时排序。
3.less<int>和后面的>之间一定要加空格,否则会将两个>看成流传递和右移远算符>>。
要定义了一个元素越小优先级越高的队列(小顶堆)是:
priority_queue<int,vector<int>,greater<int> >
当然int也可以换成char,string,bool等,也可以换成自定义类型,这里用自定义类型Person做个演示:
struct Student{
int rank;//排名
string name;//名字
}a[10005];
struct cmp{
bool operator()(Student x,Student y){
return x.rank>y.rank;//元素越小优先级越高
}
};
注意:
1.cmp函数必须是个结构体,与其他两个参数一样,返回要是布尔就要用operator()函数
2.用>是元素越小优先级越高,反之亦然
附priority_queue常用成员函数:
1.top():返回优先级最高的元素。注意!!! 没有front()和back()。
2.empty():如果队列为空,返回真。
3.size():返回队列大小。
4.push(),pop():用法和普通队列一致。注意!!! pop()弹出的是优先级最高的。
priority_queue的用途很广,具体请见P1168 中位数。
本文尚有不足之处,欢迎各位大佬指正,本蒟蒻一定update。