优先队列
一、优先队列简单介绍
- 优先队列是一种数据结构,能够实现插入一个数值,并且取出最小值(最大值)并删除等操作。
- 能够使用某种二叉树来实现优先队列,这种二叉树叫“堆”。堆分为小根堆和大根堆,小根堆的意思就是所有的子节点值一定不比父亲的值小,大根堆就是所有的子节点值一定不比父亲的节点值大。并且向堆中插入和取最小的值(或最大)的值得复杂度都为
O(logn)
。
二、STL中的优先队列
都要加头文件 #include<queue>
,具体参考https://www.cnblogs.com/flyoung2008/articles/2136485.html
- 默认大根堆,
priority_queue<int > q;
。 - 小根堆,
priority_queue<int, vector<int>, greater<int> > q;
- 自定义数据结构:
priority_queue<Node> q;
,要重写operator<
,
bool operator<(Node a, Node b){
if(a.x == b.x) return a.y > b.y;
return a.x > b.x; //大