头文件:#include <queue>
一.申明方式
std::priority_queue<T> q; std::priority_queue<T, std::vector<T>, cmp> q;
1.普通方法:
priority_queue<int> q; //大的优先级高
priority_queue<int,vector<int>, greater<int> > q; //小的优先级高
2.自定义比较函数
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
struct cmp { bool operator ()(int x, int y) { return x > y; // 小的优先级高 } }; priority_queue<int, vector<int>, cmp> q;
3.友元函数重载<
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
struct node { int x,y; friend operator < (node a, node b) { if(a.x!=b.x)return a.x > b.x; //x小的优先级高 return a.y < b.y; //y大的优先级高 } }; priority_queue<node>q;
二.常用函数
empty() //是否为空
pop() //出队
push(a) //入队
size() //长度
top() //取优先级最大的元素
三.时间复杂度
优先级队列用堆实现,只是需要构建初始堆,时间复杂度是O(n)
插入和删除只是修改了堆顶和堆底,不需要所有的都排序,只是需要再次调整好堆,因此时间复杂度都是O(log2n)