优先队列 Heap
priority_queue<int, vector<int>, less<int>>s;//less表示按照递减(从大到小)的顺序插入元素
priority_queue<int, vector<int>, greater<int>>s;//greater表示按照递增(从小到大)的顺序插入元素
不写第三个参数或者写成less都是大根堆。greater是小根堆。
在C++中优先队列默认的是大根堆,如果用小根堆则加入
greater.
定义方式
priority_queue<ListNode * , vector<ListNode *> ,Cmp> heap;
构造小根堆(重载)
1. 自定义结构重载
struct Cmp
{
bool operator()(ListNode * a, ListNode * b)
{
return a->val > b ->val; //小顶堆,,改为 < 是大顶堆
}
};
priority_queue<ListNode * , vector<ListNode *> ,Cmp> heap;
2. 重载 < >
如果是小根堆,就要重载 >
如果是大跟读, 就要重载 <
struct Node{
int x,y,z;
friend bool operator > (const Node& a,const Node& b){
return a.x > b.x; //greater,小顶堆
}
friend bool operator < (const Node& a,const Node& b){
return a.x < b.x;//less,大顶堆
}
}