优先队列
优先队列中的元素会按某种优先级依次出队列,即可实现按此优先级排序,时间复杂度和堆排序差不多
优先队列的头文件 #include<queue>
优先队列的定义式
priority_queue<int>q; 默认优先级从到大到小
priority_queue<int,vector<int>,greater<int> > q; 优先级从小到大
除此之外我们还可以选择重载运算符
重载运算符
struct pro
{ int k1;
double k2;
};
bool operator <(const pro &a,const pro &b)
{
return a.k2>b.k2; //重载运算符,使k2小的优先级高,即可实现按此优先级排序
}
priority_queue<pro>q;
优先队列的操作
向队列中加入一个元素 q.push(x);
删除队首元素 q.pop();
查询队首元素 x=q.top();
判断队列是否为空 b=q.empty() 若队列为空,则 q.empty()返回true,即b=1
询问队列中元素个数 num=q.size();
洛谷P3378 【模板】堆
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> >a;
int main()
{
int n; cin>>n;
for(int i=1;i<=n;i++)
{
int k; scanf("%d",&k);
if(k==1)
{ int x;
scanf("%d",&x);
a.push(x);
}
if(k==2)
{
cout<<a.top()<<"\n";
}
if(k==3)
{
a.pop();
}
}
return 0;
}
>