43 lines
1.2 KiB
Markdown
43 lines
1.2 KiB
Markdown
|
|
## 一、 前导知识
|
|||
|
|
#### 优先队列重载小于号
|
|||
|
|
``` cpp
|
|||
|
|
#include <bits/stdc++.h>
|
|||
|
|
using namespace std;
|
|||
|
|
struct Node {
|
|||
|
|
int val;
|
|||
|
|
// 自定义排序方法1
|
|||
|
|
// bool operator<(const Node &b) const {
|
|||
|
|
// return val < b.val;
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// 自定义排序方法2
|
|||
|
|
// 重载小于号,如果a.val<b.val,则返回true,也就是a比b小,但是,由于优先队列是大顶堆,大的先出,所以b先出队列
|
|||
|
|
friend bool operator<(Node a, Node b) {
|
|||
|
|
return a.val < b.val;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
priority_queue<Node> q;
|
|||
|
|
int main() {
|
|||
|
|
Node a;
|
|||
|
|
a.val = 1;
|
|||
|
|
q.push(a);
|
|||
|
|
|
|||
|
|
Node b;
|
|||
|
|
b.val = 2;
|
|||
|
|
q.push(b);
|
|||
|
|
|
|||
|
|
cout << q.top().val << endl;
|
|||
|
|
// 输出结果:2
|
|||
|
|
// 解释:由于优先队列是大顶堆,所以大的先出,所以b先出队列
|
|||
|
|
// 加快读入
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
在此处定义一个优先队列**大顶堆**:`priority_queue pri`;
|
|||
|
|
|
|||
|
|
如果要按照以$val$的值进行 **从小到大** 排列,操作如上。重载$<$操作符。
|
|||
|
|
|
|||
|
|
意思是如果$a.val < b.val$成立,那么结构体`Node a < Node b`。
|
|||
|
|
|
|||
|
|
**解释**:由于优先队列大顶堆是按照从大到小排列,所以结构体$b$会排列到$a$之前。
|