为优先队列重载运算符<

5
我正在尝试制作一个优先队列,这个队列是由我创建的一个类组成的,示例如下 -
std::priority_queue<Position> nodes;

我在Position类中重载了<运算符,代码如下 -

bool Position::operator<(Position& right) {
    return (fvalue < right.getFValue());
}

然而,每当我尝试编译时,就会收到错误消息,指出未重载<操作符 -
error: no match for ‘operator<’ in ‘__x < __y’
position.h:30: note: candidates are: bool Position::operator<(Position&)

我这里缺少什么?非常感谢您的帮助。

顺便提一下:return (fvalue < right.fvalue); 可能会更简单,并减少您需要维护的公共接口。 - Martin York
2个回答

15

关系运算符不应改变操作数。建议使用:

bool Position::operator<(const Position& right) const {

我猜测__x或者__y(或两者都是)是const。如果__xconst,则无法调用非const成员函数;同样,如果__yconstright不是,则无法将__y作为right参数传递。


0
  1. 最好不要为了满足集合而过载比较运算符(http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Operator_Overloading)。如果可能的话,最好使用比较器对象或函数。如果您的运算符定义了这些对象内在排序的方式,而不仅仅是它们在队列中的优先级,那么就可以了。但如果没有,如果另一个开发人员在其他上下文中使用您的操作符,可能会遇到麻烦。

  2. 我不确定 fvalue 是什么,但它可能没有定义 operator <


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接