定义:
priority_queue<Type, Container, Functional> P;
// Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。
// 如果不写后两个参数,那么容器默认用的是vector,比较方式默认用less(<),
// 也就是优先队列是大顶堆,队头元素最大。
操作:
top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
pop 弹出队头元素
优先输出小数据:
法一:
priority_queue<int, vector<int>, greater<int> > p;
//greater指升序,小的在前面,所以是小顶堆;less降序,大的在前面,所以是大顶堆
法二:自定义优先级
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;