我遇到了关于操作员过载的非常奇怪的问题。以下函数在if分支之外正常工作。当我试图否定比较结果时,我总是得到“无效比较器”错误。 否定使用!不起作用,与三元运算符相同。为什么会这样?
bool operator<(const Team& firstTeam, const Team& secondTeam)
{
if (firstTeam.getId() > 8) {
return !( firstTeam.getId() < secondTeam.getId());
}
return firstTeam.getId() < secondTeam.getId();
}
答案 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();
}