c std :: vector std :: sort无限循环
每当我试图对导致无限循环的对象矢量进行排序时,我就遇到了一个问题.我正在使用我传递给sort函数的自定义比较函数.
我能够通过在两个对象相等而不是true时返回false来解决问题但我并不完全理解解决方案.我认为这是因为我的比较功能违反了cplusplus.com上列出的规则:
任何人都可以提供更详细的解释吗? 解决方法
正如其他人所指出的那样,正确的答案是要了解“严格的弱排序”是什么.特别是,如果comp(x,y)为真,则comp(y,x)必须为假. (注意,这意味着comp(x,x)为false.)
这就是解决问题所需要知道的全部内容.如果您的比较函数违反规则,则排序算法根本不做任何承诺. 如果你好奇实际上出了什么问题,那么你的库的排序例程可能会在内部使用quicksort. Quicksort通过在序列中反复找到一对“乱序”元素并交换它们来工作.如果您的比较告诉算法a,b是“乱序”,并且它还告诉算法b,a是“乱序”,那么算法可以最终来回交换它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |