返回信息流原先想写一个优先队列,比较两个结点的值大小,像这样
priority_queue<ListNode*, vector<ListNode*>, [](ListNode* a, ListNode* b){
return a->val > b->val;
}> Q;
结果发现编译不过,谷歌了一下在stackoverflow上看到这么说,lambda表达式要加decltype,并且Q要接这个lambda表达式作参数。把lambda表达式单独写就是这样
auto cmp = [](ListNode* a, ListNode* b){return a->val > b->val;};
priority_queue<ListNode*, vector<ListNode*>, decltype(cmp)> Q(cmp);
加decltype我好像理解了,但Q后面把lambda表达式作参数传入理解不了,求指点!
这是一条镜像帖。来源:北邮人论坛 / cpp / #94617同步于 2017/3/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一个优先队列自定义比较函数的问题
chenxiansf
2017/3/1镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
二楼正解. 优先队列第三个模板参数是比较函数的类型,构造函数的第一个参数是比较函数类型的一个实例.
————
主要写JavaScript. 关注广泛, 欢迎交流.
此签名通过「北邮人签名档」脚本发送
写起来比较简洁
【 在 nvyoujiaren 的大作中提到: 】
: 我很郁闷,lz能解答吗?
: lambda表达式又不是必要的,又难以理解,为什么要用它呢?
这么说好像理解了
【 在 e97ace 的大作中提到: 】
: 二楼正解. 优先队列第三个模板参数是比较函数的类型,构造函数的第一个参数是比较函数类型的一个实例.
: ————
: 主要写JavaScript. 关注广泛, 欢迎交流.
: ...................
【 在 chenxiansf 的大作中提到: 】
: 这么说好像理解了
如果楼主觉得不方便记忆,可以这样写
struct cmp
{
bool operator()(const ListNode& a,const ListNode& b){return a.value > b.value;};
};
priority_queue<ListNode, vector<ListNode>,cmp> Q;
或者这样
struct ListNode
{
int value;
ListNode* next;
bool operator<(const ListNode& a) const {return value<a.value;};
};
priority_queue<ListNode, vector<ListNode>> Q;
然后做leetcode不能修改结构体
【 在 solosseason 的大作中提到: 】
: 如果楼主觉得不方便记忆,可以这样写
: [code=c]
: struct cmp
: ...................
【 在 chenxiansf 的大作中提到: 】
: 然后做leetcode不能修改结构体
那你就自定义一个cmp123结构体,重载()函数,这应该可以吧