微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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是“乱序”,那么算法可以最终来回交换它们.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐