1.定义
标准的写法:
priority_queue<int,vector<int>,grater<int> > pq;
-
priority_queue<Type, Container, Functional>
-
其中,
Type
为数据类型.Container
为保存数据的容器.Functional
为元素比较的方式.
当然如果没有特殊要求可以写为:
priority_queue<int> pq;
个人感觉标准的比较好。
2.排序方式
优先队列和一般的排序刚好反了。
一般排序默认是从小到大,优先队列是从大到小(即大顶堆)。
如果想用小顶堆可以这样写:
priority_queue<int,vector<int>,greater<int> >q;
3.自定义排序
如果要对一个结构体使用优先队列
struct Node{
int x,y;
};
可以这样写:
#include<bits/stdc++.h>
using namespace std;
struct Node{
int x,y;
Node(int a=0, int b=0):
x(a), y(b) {}
};
struct cmp{
bool operator()(const Node& a,const Node& b){
return a.x>=b.x; //这里是大的在前,结果就是一个小顶堆,
//和正常排序刚好相反
}
};
int main(){
priority_queue<Node, vector<Node>, cmp>p;
return 0;
}
注意这里自定义的比较函数用的是结构体,或者类也可以。
参考博客: