优先队列priority_queue

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}


 

 

 

猜你喜欢

转载自blog.csdn.net/qiaojun1234567/article/details/21413389