在程序中包含 #include<queue>#include<functional> 两个头文件
模板原型:
priority_queue<T,Sequence,Compare>
T:存放容器的元素类型
Sequence:实现优先级队列的底层容器,默认是vector<T>
Compare:用于实现优先级的比较函数,默认是functional中的less<T>
常用的操作如下:
empty() 如果优先队列为空,则返回真
pop() 删除第一个元素
push() 加入一个元素
size() 返回优先队列中拥有的元素的个数
top() 返回优先队列中有最高优先级的元素
但是在使用时必须注意:priority_queue放置元素时,不会判断元素是否重复。(因为在模板的第二个参数时顺序容器,不能保证元素的唯一性)
//STL中默认的是最大优先队列,声明时只要 priority_queue<int>q就行了
//如果是最小堆,麻烦一些priority_queue<int,vector<int>,cmp> q;当然也可以重载运算<
//看个例子
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<functional>
using namespace std;
struct mytype //自定义的一个类,要在类中重载小于符号
{
int value;
int pri;
bool operator<(const mytype b)
{
return pri<b.pri;
}
};
struct cmp{ //还得再写一个类,用于实现优先级的比较函数,就是重载小括号。
bool operator ()(const mytype &a,const mytype &b){
return a.pri<b.pri;
}
};
int main()
{
priority_queue<mytype,vector<mytype>,cmp>q;
srand(2);
for(int i=0;i<10;i++)
{
int k=rand();
mytype t;
t.value=k;
t.pri=i;
q.push(t);
cout<<"pri="<<i<<" value= "<<k<<endl;
}
cout<<endl;
for(int i=0;i<10;i++)
{
mytype t=q.top();
q.pop();
cout<<"pri="<<t.pri<<" value= "<<t.value<<endl;
}
return 0;
}