优先队列priority_queue

来源:互联网 发布:网速测试软件 编辑:程序博客网 时间:2024/06/05 21:15

链接:优先队列

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;}


 

 

 

 

 

 

0 0
原创粉丝点击