优先队列的使用

优先队列 和 普通队列一样, 队尾插入,队头删除.

不一样的是, 优先队列出队时, 是按照一定的规则 出来,比如最大,最小的.

元素的比较规则默认为按元素的值的由大到小排序;当然,可以重载“<”操作符来重新定义比较规则;

优先队列包含入队push()(插入元素),出队pop()(删除元素),读取队头元素top(),判断队列是否为空empty()和读取队列元素数量size()等方法;

通过重载运算符 < 定义比较规则的代码:

#include <stdio.h>
#include <iostream>
#include <queue>
using namespace std;

struct Node
{
    int x, y;
    bool operator < (const Node &a) const
    {
        return y < a.y; //按照 y 从大到小排列, 反之从小到大
    }
};

int main()
{
    Node node[5];
    node[1].x = 5; node[1].y = 1;
    node[2].x = 4; node[2].y = 2;
    node[3].x = 3; node[3].y = 3;
    node[4].x = 2; node[4].y = 4;

    priority_queue<Node> q;
    q.push(node[2]);
    q.push(node[1]);
    q.push(node[4]);
    q.push(node[3]);
    while(!q.empty())
    {
        printf("x = %d, y = %d
", q.top().x, q.top().y);
        q.pop();
    }
    return 0;
}
原文地址:https://www.cnblogs.com/tenlee/p/4571921.html