c ++ std :: vector std :: sort无限循环

Col*_*e W 3 c++ sorting stdvector

每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给sort函数的自定义比较函数.

我能够通过在两个对象相等而不是true时返回false来解决问题但我并不完全理解解决方案.我认为这是因为我的比较功能违反了cplusplus.com上列出的规则:

比较函数对象,如果第一个参数位于其定义的特定严格弱顺序中的第二个参数之前,则返回两个与该范围中包含的相同类型的值,否则返回false.

任何人都可以提供更详细的解释吗?

ild*_*arn 6

如果您正在寻找详细解释"严格弱序"的内容,这里有一些很好的阅读材料:我说的顺序!

如果您正在寻找帮助修复比较仿函数,您需要实际发布它.


Joh*_*ing 6

如果项目相同,则一个不会在另一个之前.文档非常清楚地表明你应该false在那种情况下返回.


Nem*_*emo 6

正如其他人所指出的那样,正确的答案是要了解"严格的弱秩序"是什么.特别是,如果comp(x,y)是真的,则comp(y,x)必须是假的.(注意,这意味着这comp(x,x)是错误的.)

这就是解决问题所需要知道的全部内容.sort如果您的比较函数违反规则,该算法根本不做任何承诺.

如果你很好奇实际出了什么问题,你的库的sort例程可能会在内部使用quicksort.Quicksort通过在序列中反复找到一对"乱序"元素并交换它们来工作.如果你的比较告诉算法a,b是"乱序",并且它还告诉算法b,a是"乱序",那么算法最终可以反复交换来回.