定义
又称优先队列,底层用堆实现。队首元素一定是优先级最高的那一个。
写法与其他STL相同
priority_queue<typename> name;
容器内元素的访问
和队列不同,优先队列没有front()、back()函数,而是只能通过top()函数来访问队首元素
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int> q;
int main(){
q.push(3);
q.push(4);
q.push(5);
cout<<q.top()<<endl;
}
常用函数
push()
push(x)令x入队,O(logN).
top()
取队首元素.
使用之前,用empty()判断是否为空,否则kennel出现错误
pop()
令队首元素出队,O(logN)
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int> q;
int main(){
q.push(3);
q.push(4);
q.push(5);
cout<<q.size()<<endl;
while(!q.empty())
q.pop();
cout<<q.size();
}
empty()
size()
优先级设置
基本数据类型的设置
int、double、char一般是数字大(字典序大)的优先级高.
priority_queue<int> q;
priority_queue<int,vector<int>,less<int> >q;
第二种定义方式中vector< int >填写的是用来承载底层数据结构堆(heap)的容器,与第一个参数相同.而第三个参数less< int >是对第一个参数的比较类,less< int >表示数字大优先级越大,而greater< int >表示数字小的优先级大
priority_queue<int,vector<int>,greater<int> >q;
结构体的优先级设置
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
struct node{
int x,y;
bool operator<(const node&a) const{
if(x!=a.x)
return x<a.x;
else return y>a.y;
}
};
priority_queue<node> q;
int main(){
node p;
for(int i=1;i<=10;i++){
p.x=i;p.y=i+1;
q.push(p);
}
p.x=5;p.y=4;
q.push(p);
while(!q.empty()){
cout<<q.top().x<<" "<<q.top().y<<endl;
q.pop();
}
}