版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiaojun1234567/article/details/21413389
链接:优先队列
STL库的优先队列容器priority_queue的头文件在<queue>中,容器的特点就是:队列的首元素一定是最大的。
如果使用自定义数据类型,例如struct ,class等,则必须重载<运算符
例如:
struct node
{
int num;
int key;
bool operator < (const node &n) const
{
return key > n.key;
}
};
//我们重载了>运算符,以key进行比较.
此时如果我们priority_queue<node>que进行操作时,最小值将优先
比较重要的方法:
top()方法,返回队首的元素,并且队首元素一定是最大的,返回的是引用。
push()方法,将一个元素插入到队列中并保持队首元素一定是最大的。
empty()方法,如果优先队列为空那么返回真。
pop()方法,将队列的第一个元素删除
注意,优先队列,已经不和普通的队列一样,它不满足队列的原则,先进先出已经不可能的
练一下哎!
使用优先队列即可,不过要注意:优先队列不满足先进先出的原则
AC代码:
#include <queue>
#include <iostream>
#include <string.h>
using namespace std;
struct node
{
char msg[16];
int num;
int key;
int cnt;
bool operator <(const node &n) const
{
if(key != n.key)
return key > n.key;
else
return cnt > n.cnt;
}
};
int main()
{
priority_queue<node>que;
char order[5];
int cnt = 0;
while(cin>>order)
{
if(strcmp(order,"GET") == 0)
{
if(que.empty())
cout << "EMPTY QUEUE!" <<endl;
else
{
node tmp = que.top();
que.pop();
cout << tmp.msg <<" " << tmp.num << endl;
}
}
else
{
node tmp;
cin >> tmp.msg >> tmp.num >> tmp.key;
tmp.cnt = cnt++;
que.push(tmp);
}
}
return 0;
}