经常用到,但每次用到都不是很熟练,总结一下!
参考
#include<queue>
template <typename T, typename Container=std::vector<T>, typename Compare=std::less<T>> class priority_queue
一共三个参数:
- T:存储元素类型
- Container:存储容器,默认是vector< T>
- Compare:比较函数,默认是less< T>
- less 降序、大顶堆,top最大,比较时会调用operator<函数
- greater 升序、小顶堆,top最小, 比较时会调用operator>函数
2 pair
typedef pair<int, int> PII;
priority_queue<PII, vector<PII>, greater<PII>> heap;
首先比较第一个,第一个相同比较第二个
3 自定义类型需要自定义优先级
struct Point
{
int val, x, y;
Point(int val, int x, int y) : val(val), x(x), y(y) {}
bool operator>(const Point &p) const { return val > p.val; }
};
3.1 重载操作符
greater
bool operator>(const Point &p) const
{
return val > p.val;//从小往大排
}
less
bool operator<(const Point &p) const
{
return val < p.val;//从大到小排
}
3.2 函数对象
struct cmp{
bool operator ()(const Point &a, const Point &b)
{
return a.val>b.val;// 按照value从小到大排列
}
};
priority_queue<node, vector<node>, cmp>q;
常用函数
- push
- pop
- size
- empty
- top