重载运算符<优先队列

时间:2011-06-23 19:00:46

标签: c++ operators operator-overloading priority-queue conditional-operator

我正在尝试制作一个像我这样的类的优先级队列 -

std::priority_queue<Position> nodes;

我重载了&lt;运营商在这样的位置 -

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

但是,每当我尝试编译时,都会收到此错误消息,说明&lt;运算符没有重载 -

error: no match for ‘operator<’ in ‘__x < __y’
position.h:30: note: candidates are: bool Position::operator<(Position&)

我在这里缺少什么?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:13)

关系运算符不应更改操作数。尝试:

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

我的猜测是__x__y(或两者)都是const。如果是__x,则无法在const上调用非const成员函数,如果__y您也无法将right作为__y参数传递是constright不是。

答案 1 :(得分:0)

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

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