Col*_*e W 3 c++ sorting stdvector
每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给sort函数的自定义比较函数.
我能够通过在两个对象相等而不是true时返回false来解决问题但我并不完全理解解决方案.我认为这是因为我的比较功能违反了cplusplus.com上列出的规则:
比较函数对象,如果第一个参数位于其定义的特定严格弱顺序中的第二个参数之前,则返回两个与该范围中包含的相同类型的值,否则返回false.
任何人都可以提供更详细的解释吗?
正如其他人所指出的那样,正确的答案是要了解"严格的弱秩序"是什么.特别是,如果comp(x,y)是真的,则comp(y,x)必须是假的.(注意,这意味着这comp(x,x)是错误的.)
这就是解决问题所需要知道的全部内容.sort如果您的比较函数违反规则,该算法根本不做任何承诺.
如果你很好奇实际出了什么问题,你的库的sort例程可能会在内部使用quicksort.Quicksort通过在序列中反复找到一对"乱序"元素并交换它们来工作.如果你的比较告诉算法a,b是"乱序",并且它还告诉算法b,a是"乱序",那么算法最终可以反复交换来回.