priority使用pair比较的坑点
所以用pair的priority_queue只能使用struct的重载比较,why?!
重载运算符的操作不能用于pair类型数据的排序,只能作用于结构体或类对象。—> 所以不能使用node型的priority_queue的函数重载操作符的方法
node可以函数操作符重载
pair不支持重载运算符
priority_queue定义不支持”嵌入式”函数重载的方法,即 priority_queue<P, vector<P>, cop >
这样会报错 sort(a,a+n,cop)
可以
比较区只有strut定义
嵌入式函数重载报错
综上:不能函数重载了,那么就只能struct的自定义重载了咯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <iostream> #include <queue> using namespace std;
struct node { int x, y; };
bool operator<(const node& a, const node& b) { return a.y > b.y; } bool cop(const P& a, const P& b) { return a.second > b.second; }
typedef pair<int, int> P; struct cmp1 {
bool operator()(P a, P b){ return a.second > b.second; } };
int main(){ cout << "Popping out elements..."; priority_queue<P, vector<P>,cmp1> test; test.push({ 3, 2 }); test.push({ 1, 6 }); test.push({ 2, 8 }); test.push({ 5, 10 }); while (!test.empty()) { cout << ' ' << test.top().second; test.pop(); } cout << endl; return 0; }
|
2019年7月9日23:27:19 更第一波
题集
注: 为了统一性,所以一般链接地址都是用的Virtual Judge的链接地址,只有VJ上没有的才用其他链接
2019年7月13日第一更
poj3190
牛客重现2019矿大省赛G题
附录
priority_queue各种实现方式的时间复杂度对比