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

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

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

Comparison function object that,
taking two values of the same type
than those contained in the range,
returns true if the first argument
goes before the second argument in the
specific strict weak ordering it
defines,and false otherwise.

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

解决方法

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

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...