题目链接:点击打开链接
优先队列模板题:
优先队列自定义比较规则需要在结构体中重载 < 运算符——friend bool operator < (node a,node b){..........}使得a的优先级小于b的优先级时返回true,最终实现的是最大堆
优先级相同先输出id小的,这里错了几次
代码:
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
struct node{
int id,lev;
friend bool operator <(node a,node b){
if(a.lev==b.lev)
return a.id>b.id;
return a.lev<b.lev;
}
};
priority_queue <node> q[4];
int main()
{
int T;
int t1,t2;
node t;
int K;
char temp[20];
while(cin>>T){
K=1;
for(int i=1;i<=T;i++){
cin>>temp;
if(strcmp(temp,"IN")==0){
cin>>t1>>t2;
t.id=K;
t.lev=t2;
K++;
q[t1].push(t);
}
else if(strcmp(temp,"OUT")==0){
cin>>t2;
if(q[t2].empty())
cout<<"EMPTY"<<endl;
else{
cout<<q[t2].top().id<<endl;
q[t2].pop();
}
}
}
for(int i=0;i<=3;i++){
while(!q[i].empty()){
q[i].pop();
}
}
}
return 0;
}