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

时间:2015-02-11 01:28:04

标签: c++ string sorting operator-keyword

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;
    }
}

继承人在主():

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

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

Program:C:\.....\include\algorithm
Line:3014
Expression: invalid operator<

1 个答案:

答案 0 :(得分:1)

当我模拟一个玩家类并运行你的代码时,它运行正常。错误必须属于其他地方。

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

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();
    }

}

同时考虑字符串通常以反向排序顺序(按字母顺序排列)列出。因此,小于运算符(&lt;)将更好地工作:

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();
    }

}