0%

C++语法之priority_queue自定义大小根堆

[TOC]

头文件

1
#include<priority_queue>

基础调用API

1
2
3
4
5
6
int main(){
priority_queue<int> q1;//默认大根堆
priority_queue<int, vector<int>, less<int> > q2;//完全体的大根堆,和上述一致
priority_queue<int, vector<int>, greater<int> > q3;//小根堆
return 0;
}

进阶思考,自定义数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
struct cmp1{
bool operator()(ListNode *a, ListNode *b){
return a->val > b->val; //是> 而不是<
}
};
struct cmp2{
bool operator()(ListNode *a, ListNode *b){
return a->val < b->val;
}
};
int main(){
priority_queue<ListNode *, vector<ListNode *>, cmp1> q4;//自定义小根堆
priority_queue<ListNode *, vector<ListNode *>, cmp2> q5;//自定义大根堆
return 0;
}