优先级详解见注释
#include<bits/stdc++.h>
#define lint long long int
using namespace std;
struct Node{
int id, val;
};
// operator < 指的是优先级
// 你有两个结构体 node a node b
// a < b 的意思是 a 的优先级比 b 小
bool operator < (Node a, Node b)
{
// 在里面定义什么叫做优先级更小
// 这个的意思其实是
// 如果 a.val > b.val 返回 true
// 否则返回 false
// true 就代表 a < b (a 的优先级比 b 小)
// false 就代表 a 的优先级较大
return a.val > b.val;
}
priority_queue <Node> q;
signed main(){
int n;
cin >> n;
// for(int i=1; i<=n; i++)
// {
// int x, y;
// cin >> x >> y;
// // id is x val is y
// q.push({x, y});
// }
// cout << q.top().id << " " << q.top().val;
Node x = {1, 100};
Node y = {2, 200};
// 如果 x < y (比较优先级)
if(x < y)
bool cmp(int x, int y)
{
return x < y;
}
// sort : 优先级小的在前面
// priority_queue : 优先级大的在前面
// priority_queue 可以支持动态加点,动态取队首
//单次的复杂度是 O(log n)
// 动态加点:q.push(...) O(log n)
// 动态取队首: q.top() O(1)
// 动态取队首 <=> 取当前队列中,优先级最高的
// q.pop() O(log n)就是弹队首 弹完之后,优先级第二大的会变成队首
sort(a+1, a+n+1, cmp);
}