转自:https://blog.csdn.net/qq_29883591/article/details/69063253
1.问题
在做354. 俄罗斯套娃信封问题题目时,写的sort函数:
sort(envelopes.begin(),envelopes.end(),[](const vector<int>& a,const vector<int>& b){return a[0]<=b[0];});
本来的想法是让它按非递减排序,给的样例能通过,但是提交会有样例报错。 heap-buffer-overflow on address 0x617000000068,但是搜索的解决办法都是说访问了不该访问的下标。
2.sort排序算法性质
c++中默认的比较操作是<运算符,用来处理非降序的排序要求,提供的操作必须在关键字类型上定义一个严格弱序。可以将严格所需看做“小于等于”,但“小于等于”不是<= !!!。
但比较函数必须具备一以下三个:
但如果比较函数中使用<=:
条件1和条件3都不符合,当测试数据中有相等的数据出现时,就会报错。invalid comparator。