美文网首页
std::sort invalid comparator 的严格

std::sort invalid comparator 的严格

作者: 许彦峰 | 来源:发表于2022-06-16 11:52 被阅读0次

测试代码

std::vector<int> arr=[1,5,2,4,3];
std::sort(arr.begin(), arr.end(), [](int a, int b){
  return a >= b;
});

这个排序算法在运行时会报错:


网上查了好久,都是说C++标准规定cmp函数是弱序的,然后把
return a>=b

改成

return a>b

就行了,具体为啥也没说明白,很多的官方术语解释,看的云里雾里。

大致追踪了下stl的代码,发现其实这个报错就是下边这个逻辑导致的,稍微花点时间研究下,原因就写在代码里面:


以上代码大概意思就是要遵循结果对称。

  • 返回true的情况,假如complex(1,2) == true,那么complex(2,1)==false,道理不言而喻。
  • 返回为false,则不存在这个校验。

所以出现这个Assertion,就要仔细检查比较函数的实现,里面肯定是有问题的。

出现问题,果然还是看源码能够知道出错的真正原因。

相关文章

网友评论

      本文标题:std::sort invalid comparator 的严格

      本文链接:https://www.haomeiwen.com/subject/frfqvrtx.html