1、int类型
C++的优先级队列默认是大顶堆,大数的优先级高,即将多个数放入优先级队列后,队首(下一个出队)元素是这些数里面最大的那个。
默认情况等价于:
priority_queue<int,vector<int>,less<int> >q;
代码:
#include <iostream>
#include <queue>
using namespace std;
void run1(){
priority_queue<int> q;
q.push(2),q.push(5),q.push(1),q.push(7),q.push(3);
while(!q.empty()){
cout<<q.top()<<" ";
q.pop();
}
cout<<endl;
}
int main(){
run1();
}
输出结果:
7 5 3 2 1
如果想要小数位于队首,需要改变优先级:
priority_queue<int,vector<int>,greater<int> >q;
这样的输出是:
1 2 3 5 7
2、结构体
例如一个结构体中有连个元素x和y,我们想要让x值大的优先级更高,即位于队首。
需要对结构体重载运算符,代码:
#include <iostream>
#include <queue>
using namespace std;
struct node{
int x, y;
node(int _x, int _y): x(_x), y(_y){}
bool operator < (const node &a)const{
return x < a.x;
}
};
void run2(){
priority_queue<node> q;
q.push(node(2,4)),q.push(node(5,2)),q.push(node(1,1)),q.push(node(7,0)),q.push(node(3,10));
while(!q.empty()){
node tmp = q.top();
q.pop();
cout<<tmp.x<<" "<<tmp.y<<endl;
}
}
int main(){
run2();
}
输出结果:
7 0
5 2
3 10
2 4
1 1
如果让小的x优先级更高,则这样重载:
struct node{
int x, y;
node(int _x, int _y): x(_x), y(_y){}
bool operator < (const node &a)const{
return x > a.x;
}
};
输出结果:
1 1
2 4
3 10
5 2
7 0