sort中自定义cmp函数不能是<=

转自: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。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/14486830.html