前言:一直记不住带有自定义比较函数的优先队列声明形式,今天刚好碰到这道题,所以前来记录一下
方法一:利用 C++ 新特性的 Lambda表达式
// 大根堆
auto cmp = [&](const pair<int, int>& a, const pair<int, int>& b) {
return a.first + a.second < b.first + b.second;
};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> heap(cmp);
方法二:自定义比较函数结构体
struct cmp{
// 大根堆
bool operator ()(const pair<int, int>& a, const pair<int, int>& b){
return a.first + a.second < b.first + b.second;
}
};
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> heap;
方法三:使用内部头文件
// 小根堆
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<PII>> heap;