std :: sort不能使用比较函数

时间:2014-06-25 09:14:27

标签: c++

这是我的代码:

void ComputerPlayer::MakeMove(Board& b)
{
    int i,j;
    BoardCmp BC;
    std::vector<Board> tmp=successors(b);
    for (i=0;i<(int)tmp.size();i++){
      tmp.at(i).SetGrade(Evaluate(1,0,tmp.at(i)));
    }
    std::sort(tmp.begin(),tmp.end(),BC);
}

矢量tmp具有所有正确的值,但它没有排序

我的整个问题是STL排序功能。

这是头文件:

   class Board {
public:

    Board();
    Board(const Board& b);
    Board operator= (const Board& rhs) {
        return Board(rhs);
    }
    void SetGrade(int grade){_grade=grade;}
    int GetGrade() const {return _grade;}
    friend class BoardCmp;

private:
    Piece* _board[BOARD_SIZE][BOARD_SIZE];
    Point _lastP;
    Move _lastM;
    t_player_num _turn; 
    int _grade;
};

class BoardCmp
{ 
public: 
    bool operator()(Board& a,Board& b) 
    {return (a.GetGrade()<b.GetGrade()) }; 
};

怎么了?

1 个答案:

答案 0 :(得分:0)

您的副本分配运算符(operator=)实现不正确,这可能会导致sort给出错误的结果。

复制赋值运算符应该更改它所调用的对象的值,而您的实现只返回不同的对象而不更改当前的对象。