学习算法过程中经常会遇到堆,而STL中的priority_queue是(优先队列)就是一个封装好的堆结构。
转载自:https://blog.csdn.net/xiaoquantouer/article/details/52015928
1、头文件
#include<queue>
2、普通定义方法
priority_queue<int> p;
3、更一般的定义方法
priority_queue<Type, Container, Functional>
Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。
如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。
4、优先输出小数据
priority_queue<int, vector<int>, greater<int> > p;
5、自定义优先级,重载默认的 < 符号
struct Node{
int x,y;
Node(int a=0, int b=0):
x(a), y(b) {}
};
struct cmp{
bool operator()(Node a, Node b){
if(a.x == b.x) return a.y>b.y;
return a.x>b.x;
}
};
priority_queue<Node, vector<Node>, cmp>p;
6、常用函数
p.push(x);//把x加入堆
x=p.top();//得到堆顶元素
p.pop();//删除堆顶元素