基本数据类型时,直接用priority_queue<int> heap
, priority_queue<int, vector<int>, greater<int>> heap
即可。
priority_queue
中存储结构体时,需要自定义比较规则,比较绕,这里记录一下。
作为大根堆使用时
priority_queue<Seg> heap
大根堆需要重载小于号,如果我们要实现一个双关键字排序,首先按照v
从大到小排,v
相等的情况下按照l
从小到大排。因此写v < t.v
就是让v
按照大根堆从大到小排。但是!!实现从小到大排,就要反一下了,写成l > t.l
。
struct Seg{
int l, r, v;
bool operator< (const Seg& t) const{
if(v != t.v) return v < t.v;
return l > t.l;
}
};
作为小根堆使用时
priority_queue<Seg, vector<Seg>, greater<Seg>> heap
小根堆需要重载大于号,如果我们要实现一个双关键字排序,首先按照v
从小到大排,v
相等的情况下按照l
从大到小排。因此写v > t.v
就是让v
按照小根堆从小到大排。但是!!实现从大到小排,就要反一下了,写成l < t.l
。
struct Seg{
int l, r, v;
bool operator> (const Seg& t) const{
if(v != t.v) return v > t.v;
return l < t.l;
}
};