priority_queue 的声明

priority_queue的使用,首先priority_queue是以堆的概念为基础的。所有的操作都是以堆为准。

相当于对堆这种数据结构做了一次包装,提供特定的操作。

首先看priority_queue的声明,priority_queue包含在#include <queue> 头文件中。使用前记得include。

声明如下:

从声明可以看出,priority_queue的低层容器默认是vector,排序规则默认是less, 即如果想声明一个大根堆,只需要传进来一个元素类型即可。

priority_queue<int> pq;
priority_queue<long> pq;

如果想声明一个小根堆,就需要传入新的比较规则,因为模板默认比较规则是第三个参数,所以即使不改变低层容器,在声明时也是需要写上的。

priority_queue<int, vector<int>, greater<int> > pq;

如果是自定义类型,就需要为自定义类型定义比较规则。

struct Node{
    int val;
    int x;
};

struct cmp{
    bool operator()(const Node& a, const Node& b){
        return a.val > b.val;
    }
};
priority_queue<Node, vector<Node>, cmp> pq;  //根据元素的val值,生成一个大根堆

如果指向传入一个自定义类型,生成大根堆,就需要在自定义类型里面定义比较规则

struct node
{
    int x,y;
    bool operator < (const node & a) const
    {
        return x<a.x;
    }
};
priority_queue<node> pq;
参考博客:https://blog.csdn.net/c20182030/article/details/70757660


猜你喜欢

转载自blog.csdn.net/ddou_pan/article/details/79799778