https://www.cnblogs.com/jimodetiantang/p/9016826.html
https://www.cnblogs.com/san-fu-su/p/5733058.html
https://www.cnblogs.com/IamTing/p/4541901.html
//问题
std::sort 比较函数,不能定义为小于等于,或大于等于。。这是C++标准规定的,否则,容易产生越界,Crash问题。
可以参考我的博客。关于这个问题的记录。
https://blog.csdn.net/zxc024000/article/details/86299125
lambda只需要返回bool为true时的情况,只需要定义 < 就已经能判断两个值的关系了。
数学逻辑问题,如果a < b 为true,说明a小b,否则可以判断 b < a如果为true,说明a大于b,再否则就是相等了。
稳定排序的必要条件就是这样,a 与 b相等的情况下,a <= b和b <= a都为true,就会导致不稳定排序。
看std::源码(源码剖析https://blog.csdn.net/qq_16836151/article/details/51527160)里,经常出现__unguarded_前缀之样的sort,就是不没有检查边界的排序。最后一步有插入排序,是把前16个先排序,后面的部分的排序就不再检查边界,比如你的数据里前16个数99,98,98,96,95,75,94,93,92,75,89,88,87,84,84,83先排好后最小的75在最开头处,之后又有个75一直往前比较,比较到了数组开头处还是75,75 <=75为true,因不再进行边界检查,所以还会往前遍历,导致越界。
小于号升序,大于号降序
https://zhidao.baidu.com/question/1830919514177751220.html
请问C++中为什么sort的自定义比较函数,小于号升序,大于号降序?