加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:52:45 所属栏目:百科 来源:网络整理
导读:每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给sort函数的自定义比较函数. 我能够通过在两个对象相等而不是true时返回false来解决问题但我并不完全理解解决方案.我认为这是因为我的比较功能违反了cplusplus.com上列出
每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给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是“乱序”,那么算法可以最终来回交换它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读