C++在priority_queue中自定义比较函数
方法一
可调用函数操作符的对象
struct Node{
int val;
};
struct cmp{
bool operator()(const Node &a, const Node &b){
return a.val > b.val;
}
}
priority_queue<Node, vector<Node>, cmp> q;
方法二
重载比较运算符
struct Node{
int val;
/* 重载小于运算符
必须以友元函数的形式
*/
friend bool operator<(const Node &a, const Node &b){
return a.val > b.val;
}
};
priority_queue<Node, vector<Node>> q;
方法三
使用函数指针
struct Node{
int val;
};
bool cmp(const Node &a, const Node &b){
return a.val > b.val;
}
priority_queue<Node, vector<Node>, function<bool(const Node&, const Node&)>> q(cmp);
方法四
使用lambda表达式
struct Node{
int val;
};
auto cmp = [](const Node &a, const Node &b){
return a.val > b.val;
};
priority_queue<Node, vector<Node>, decltype(cmp)> q(cmp);
//或者
priority_queue<Node, vector<Node>, function<bool(const Node&, const Node&)> q(cmp);