priority_queue(优先队列)使用方法

priority_queue默认是一个大根堆:

并且出队方式与普通队列queue的front不一样,是top 。

如果想用小根堆,可以修改定义时的参数:

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

除了指定模板为int之外,还指定了构造的容器是vector,重载的运算符是greater(大于)运算符。

下面我们来看结构体。

首先我们定义结构体:

typedef struct Node{
    int v;
    Node(int v):v(v){
    }
    bool operator < (const Node& obj) const
    {
        return v<obj.v;
    }
};

我们重载了小于符号(在cpp中,一般来说都是重载小于符号。比如 set、map 记录结构体,sort时定义的cmp函数其实也是小于符号的定义),并且priority_queue也一如既往的执行着它输出最大值的操作:

如果我们需要小根堆,只需要把重载的小于符号的判断条件改一下就好了。

注意:在执行top之前必须保证非空,不然会报错。

原文地址:https://www.cnblogs.com/TQCAI/p/8534369.html