Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用比较函数时排序不起作用_C++ - Fatal编程技术网

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在任何地方使用都比不在任何地方使用更安全!