C ++无效运算符<使用排序时
Posted
技术标签:
【中文标题】C ++无效运算符<使用排序时【英文标题】:C++ invalid operator< when using sorting 【发布时间】:2015-02-11 01:28:03 【问题描述】: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(), sortGame);
这是在 Visual Studio 中调试时显示的错误。
Program:C:\.....\include\algorithm
Line:3014
Expression: invalid operator<
【问题讨论】:
3014 到底是哪一行? 不确定...在#include @pinesfrst Visual Studio 错误可能是由于您的operator <
不一致而出现的,即a < b
但同时b < a
。当然这是一种荒谬的情况,但是 Visual Studio 的调试运行时会针对这种错误情况进行测试,可能您的代码没有通过测试。
此外,您应该通过const reference
将对象传递给函数,而不是通过值。
要获得明确的答案,请发帖MCVE
【参考方案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();
还要考虑字符串通常以反向排序顺序(字母顺序)列出。因此小于运算符(
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();
【讨论】:
以上是关于C ++无效运算符<使用排序时的主要内容,如果未能解决你的问题,请参考以下文章
在 MLCP 中作为 -query_filter 传递时,值运算符“<”(小于)符号无效
C语言socket编程中setsockopt设置超时时间对read无效