题目:
给出优先队列的实现,实现4个操作
- ADD N P:往队列里加入id为N的优先级为P的任务
- NEXT:输出下一个最高优先级的任务的id,如果优先级相同输出id小的任务,若队列中没有任务输出-1
- REMOVE N:移除id为N的任务
- COUNT:输出队列中的任务数量 输入:第一行为正整数n,表示操作的个数;之后有n行操作;
输出:输出操作的结果
示例
输入:
10
ADD 1 1
ADD 2 3
ADD 3 2
ADD 4 3
NEXT
REMOVE 3
COUNT
NEXT
NEXT
NEXT
输出:
2
2
4
1
-1
分析:这道题目其实考试的是STL常见容器的知识;题目中remove操作是容器priority_queue本来所没有的操作,在这个题目中用priority_queue实现显然不合适。在常用的map,vector,set里面选择一个;总的来说,我觉得set和map会好一些; vector删除效率比较差;
#include<iostream>
#include<set>
#include<string>
using namespace std;
struct node {
int N, P;
bool operator<(const node& A)const {
return P != A.P