题目描述:
给出优先队列的实现,实现4个操作
- ADD N P:往队列里加入id为N的优先级为P的任务
- NEXT:输出下一个最高优先级的任务的id,如果优先级相同输出id小的任务,若队列中没有任务输出-1
- REMOVE N:移除id为N的任务
- COUNT:输出队列中的任务数量
没有找到类似的提交地址,有大佬找到的话,欢迎评论
#include<cstdio>
#include<iostream>
#include<set>
#include<queue>
using namespace std;
struct node{
int id;
int p;
friend bool operator< (node a,node b){
if(a.p == b.p )
return a.id < b.id;
else
return a.p > b.p;
}
node(){}
node(int ii,int pp){
id = ii;
p = pp;
}
};
priority_queue<node> q;
set<int> s;
int sum;
void add(int id,int p){
q.push(node(id,p));
sum ++;
}
void next(){
if(sum==0){
printf("-1\n");
return ;
}
sum--;
bool flag = true;
node tmp ;
while(flag){
tmp = q.top();
q.pop();
if(s.find(tmp.id)!=s.end()){
s.erase(s.find(tmp.id));
}else{
flag = true;
}
}
printf("%d\n",tmp.id);
return ;
}
void rm(int id){
s.insert(id);
sum--;
}
void count(){
printf("%d\n",sum);
}
int main(){
sum = 0;
// main();
return 0;
}