每当我尝试对导致无限循环的对象向量进行排序时,我都会遇到一个问题。我正在使用传递给排序函数的自定义比较函数。
当两个对象相等而不是 true 时,我能够通过返回 false 来解决这个问题,但我不完全理解解决方案。我认为这是因为我的比较函数违反了 cplusplus.com 上概述的这条规则:
比较函数对象,
取两个相同类型的值
比范围内包含的那些,
如果第一个参数返回 true
位于第二个参数之前
具体严格弱排序
定义,否则为 false。
谁能提供更详细的解释吗?
正如其他人指出的那样,正确的答案是了解什么是“严格的弱排序”。特别是,如果comp(x,y)
是真的,那么comp(y,x)
一定是假的。 (请注意,这意味着comp(x,x)
是假的。)
这就是解决问题所需要知道的全部内容。这sort
如果您的比较函数违反规则,算法根本不做出任何承诺。
如果您想知道到底出了什么问题,您的图书馆sort
例程可能在内部使用快速排序。快速排序的工作原理是在序列中重复查找一对“无序”元素并交换它们。如果你的比较告诉算法 a,b 是“无序的”,并且它也告诉算法 b,a 是“无序的”,那么算法最终可能会一遍又一遍地来回交换它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)