测试代码
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
,就要仔细检查比较函数的实现,里面肯定是有问题的。
出现问题,果然还是看源码能够知道出错的真正原因。
网友评论