C++ 使用比较函数时排序不起作用
这是我的代码:C++ 使用比较函数时排序不起作用,c++,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.beg
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()) };
};
有什么问题?您的复制分配运算符=执行不正确,这可能会导致排序给出错误的结果
copy assignment操作符应该更改它所调用的对象的值,而您的实现只返回一个不同的对象,而不更改当前对象。Ahh,旧的if条件返回true;否则返回false;。这是一个反模式。您应该这样编写:switch condition{case true:return condition?true:false;break;case false:return not true;break;default:std::terminate;}您的代码不会编译–BC声明的范围与其使用的范围不同。请把真实的密码贴出来。怎么了?:你告诉我们。编译器可能会给您一条错误消息?还是编译并产生意外的结果?到底是什么不起作用?这些信息对于诊断问题非常有用。请添加足够的代码使其成为一个问题。评估调用是suspicious@JamesKanze在任何地方使用都比不在任何地方使用更安全!