优先队列也就是可以自动排序的功能强大些的队列。
priority_queue<node>q;
//node是结构体,结构体里面重载了’<‘符号
priority_queue<int,vector<int>,greater<int> >g_q;
priority_queue<int,vector<>int>,less<int> >l_q;
//第一个是递增的,第二个是递减的。
//对于队列的基本操作
q.size();//返回q里元素个数
q.empty();//如果q是空返回1否则返回0
q.push(k);
q.pop();//弹出第一个元素
q.top();
q.back();
#include <bits/stdc++.h>
using namespace std;
int main(){
int res[5]={8,1,5,9,3};
priority_queue<int>q;
for(int i=0;i<5;i++){
q.push(res[i]);
}
for(int i=0;i<5;i++){
int m = q.top();
q.pop();
printf("%d ",m);
}
}
//输出结果是9 8 5 3 1,也就是说默认从大到小排列
对于priority_queue< node >q当中是结构体,我们可以在结构体当中对其进行重载。
#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y;
bool operator < (const node & a) const{
return x < a.x;
}
}k;
int main(){
priority_queue<node>q;
k.x=10,k.y=100;
q.push(k);
k.x=12,k.y=60;
q.push(k);
k.x=14,k.y=40;
q.push(k);
k.x=6,k.y=80;
q.push(k);
k.x=8,k.y=20;
q.push(k);
while(!q.empty()){
node m= q.top();
q.pop();
printf("(%d %d)\n",m.x,m.y);
}
}
//输出按x递减输出
#include <bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<int> > g_q;
priority_queue<int ,vector<int>,less<int> > l_q;
int main(){
int res[5]={8,4,2,9,5};
for(int i=0;i<5;i++){
g_q.push(res[i]);
l_q.push(res[i]);
}
printf("greater<int>:");
for(int i=0;i<5;i++){
int m = g_q.top();
g_q.pop();
printf("%d ",m);
}
printf("\n");
printf("less<int>:");
for(int i=0;i<5;i++){
int m = l_q.top();
l_q.pop();
printf("%d ",m);
}
}