优先队列
在c++中优先队列的头文件时,定义方法与其他STL容器相同(比如栈、向量、映射表等)。
Priority_queue<T1> q;
T1可以是任何数据类型(如int、double、string……)
元素访问
和队列不一样的是,优先队列没有front()和back()函数,只有top函数,可以访问对手元素(堆顶元素),也就是优先级最高的元素。
#include<cstdio>
#include<queue>
using namespace std;
int main(){
priority_queue<int> q;
q.push(3);
q.push(4);
q.push(2);
q.push(1);
printf(“%d\n”,q.top());
return 0;
}
输出结果
4
##其他函数
优先队列中入队、出队、检测是否为空、返回元素个数的函数与普通队列相同。
入队
push(x);
即可将x入队
出队
pop()
即可让队首(堆顶元素)出队。
检测是否为空
用empty()函数检测优先队列是否为空,返回true为空,否则返回false。
发返回元素个数
用size()函数即可返回队列内元素的个数
priority_queue元素优先级的设置
基本数据类型(int,double,float……)
下面两种优先队列一样(以int为例)。
注意>间有空格
priority_queue<int> q;
priority_queue<int,vector<int>,less<int> > q;
可以看出第二种定义方式多了一个。vector,less,vector填写的是来承载数据结构堆(heap)的,less是对第一个参数的比较类,less表示数字大的优先级大,greater表示数字小的优先级大。
那么就可以定义一个数字小的优先级大的优先队列。
priority_queue<int,vector<int>,greater<int> > q;
最后,再提醒一点,在使用top()函数前一定要用empty()判断优先队列是否为空,否则可能因为队空而发生错误。