使用排序时C++无效运算符<

C++ invalid operator< when using sorting

本文关键字:运算符 lt 无效 C++ 排序      更新时间:2023-10-16
bool sortingGame(Player Player1, Player Player2)
{
    if (Player1.gamePercent() > Player2.gamePercent())// first compare precetage (float)
    {
        return true;
    }
    else if (Player2.gamePercent() > Player1.gamePercent())
    {
        return false;
    }
    else if (Player1.getLastName() > Player2.getLastName())//then names (std::string)
    {
        return true;
    }
    else if (Player2.getLastName() > Player1.getLastName())
    {
        return false;
    }
    else if (Player1.getFirstName() > Player2.getFirstName())
    {
        return true;
    }
    else
    {
        return false;
    }
}

这里在 main((:

sort(Players.begin((, Players.end((, sortingGame(;

下面是在 Visual Studio 中调试时显示的错误。

Program:C:.....includealgorithm
Line:3014
Expression: invalid operator<

当我模拟玩家类并运行您的代码时,它工作正常。错误必须属于其他位置。

但是,通过检查相等性并返回比较结果,可以大大收紧您的代码:

bool sortingGame(Player Player1, Player Player2)
{
    if (Player1.gamePercent() != Player2.gamePercent())// first compare precetage (float)
    {
        return Player1.gamePercent() > Player2.gamePercent();
    }
    else if (Player1.getLastName() != Player2.getLastName())
    {
        return Player1.getLastName() > Player2.getLastName();
    }
    else
    {
        return Player1.getFirstName() > Player2.getFirstName();
    }
}

还要考虑字符串通常以反向排序顺序(字母顺序(列出。 因此,小于运算符(<(会更好:

bool sortingGame(Player Player1, Player Player2)
{
    if (Player1.gamePercent() != Player2.gamePercent())// first compare precetage (float)
    {
        return Player1.gamePercent() > Player2.gamePercent();
    }
    else if (Player1.getLastName() != Player2.getLastName())
    {
        return Player1.getLastName() < Player2.getLastName();
    }
    else
    {
        return Player1.getFirstName() < Player2.getFirstName();
    }
}