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。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步