priority_queue
priority_queue是个大顶堆容器适配器,提供常数时间级的最大元素查找,对数代价的插入与删除。
成员函数有 判空(empty)、容量(size)、栈顶元素(top)、压栈(push)、出栈(pop)等。
头文件
#include
声明方式
默认
1
2
3priority_queue<int> q; //添加元素之后,元素从大到小的顺序出队
//等价于 priority_queue<int, vector<int>, less<int>> q;
priority_queue<int, vector<int>, greater<int>> q; //元素从小到大的顺序出队
自定义优先级:
1
2
3
4
5
6
7
8
9
10
11//比较函数return true 表示前者的优先级低于后者
//第一种写法:
struct cmp {
operator bool ()(int x, int y) {
return x > y;//最小值优先
}
}
priority_queue<int, vector<int>, cmp> q;
//第二种写法:
auto cmp = [](int x, int y) { return x > y; };
priority_queue<int, vector<int>, decltype(cmp)> q(cmp);结构体声明方式:
1
2
3
4
5
6
7
8struct node {
int x;
string data;
bool operator< (const node& a) const {
return this.x > a.x;
}
};
priority_queue<node> q; //排序规则由 operator< 中的实现决定注意:
结构体比较时通过自定义operator< 操作符来比较元素中的优先级。
比较函数return true 表示前者的优先级低于后者
代码实现
1 | template<typename T> void print_queue(T&q) { |