【发布时间】:2018-11-04 17:28:29
【问题描述】:
我有一个名为Foo 的类,每个Foo 对象都有一个名为yVal 的方法。我想要的是Foo对象的优先级队列,按Foo.yVal()的升序排列
我在Foo 中重载了 operator> 和 operator
bool operator> (const Foo &f){
return yVal() > f.yVal();
}
bool operator< (const Foo &f){
return yVal() < f.yVal();
}
所以我有以下代码:
priority_queue<unique_ptr<Foo>, vector<unique_ptr<Foo>>, greater<unique_ptr<Foo>> > Queue;
但这并不是按照Foo.yVal() 的升序对优先级队列进行排序。相反,它只是以某种未知的随机顺序对它们进行排序。我在 operator> 和 operator
auto cmp = [](Foo left, Foo right) {return left.xVal() > right.xVal();};
priority_queue<unique_ptr<Foo>, vector<unique_ptr<Foo>>, decltype(cmp) > Queue(cmp);
但这给了我“非静态数据成员声明为自动”的错误。
理想情况下,我希望通过更大的 和运算符重载来实现这一点。如果不能,请告诉我我在 lambda 上做错了什么(对 lambda 不太熟悉,如果可能的话希望避免使用它们)。
我也尝试过使用仿函数,但同样,仿函数上的 auto 给了我同样的“非静态数据成员声明为 auto”的错误。
【问题讨论】:
-
你不是已经问过这个了吗?
-
@NeilButterworth 是的,但在答案中我不明白该仿函数应该用于什么?抱歉,我可以再澄清一下吗?
-
如果您不理解答案,您应该在原始问题中要求澄清,而不是发布新问题。
-
@NeilButterworth 你能否重新发布答案并澄清它。对不起,我是新人。
标签: c++ priority-queue unique-ptr