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之前必须保证非空,不然会报错。