这是我的代码:
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()) };
};
怎么了?
答案 0 :(得分:0)
您的副本分配运算符(operator=
)实现不正确,这可能会导致sort
给出错误的结果。
复制赋值运算符应该更改它所调用的对象的值,而您的实现只返回不同的对象而不更改当前的对象。