当否定结果时,C ++“无效比较器”在运算符过载时出错

时间:2016-01-02 22:02:45

标签: c++

我遇到了关于操作员过载的非常奇怪的问题。以下函数在if分支之外正常工作。当我试图否定比较结果时,我总是得到“无效比较器”错误。 否定使用!不起作用,与三元运算符相同。为什么会这样?

bool operator<(const Team& firstTeam, const Team& secondTeam)
{
 if (firstTeam.getId() > 8) {
  return !( firstTeam.getId() < secondTeam.getId());
 }
 return firstTeam.getId() < secondTeam.getId();
}

1 个答案:

答案 0 :(得分:1)

假设团队a的ID为9,团队b的ID为7,则b < a(在if之外)和a < b(在if之内)都为true

正确的比较器应该定义strict weak ordering

这并不是100%明确你想要实现的目标,但以下代码将定义正确的严格弱排序

bool operator<(const Team& firstTeam, const Team& secondTeam)
{
 if (firstTeam.getId() > 8 && secondTeam.getId() > 8) {
  return firstTeam.getId() > secondTeam.getId(); // note > instead of <
 }
 return firstTeam.getId() < secondTeam.getId();
}