sort总结

sort 语法细节总结

sort(first,last,comp)对给定区间[first,last)进行排序,注意此处包括first但是不包括last,其中comp可自定义排序依据。
其中comp需要满足一定要求,具体如下:
比较函数对象(即满足比较 (Compare) 概念的对象),若第一参数小于(即先序于)第二参数则返回 ​true ,否则返回false。
比较函数的签名应等价于如下者:
bool cmp(const Type1 &a, const Type2 &b);
签名不必拥有 const &,但函数对象必须不修改传递给它的对象。
类型 Type1Type2 必须使得RandomIt类型的对象能在解引用后隐式转换到这两个类型。
其中comp具有如下表要求:

表达式返回类型要求
comp(a,b)可隐式转换为bool建立有下列属性的严格弱序关系。
1、对于所有a,comp(a,a)==false
1、若comp(a,b)==truecomp(b,a)==false
3、若comp(a,b)==truecomp(b,c)==truecomp(a,c)==true

例如:

#include <bits/stdc++.h>
using namespace std;

bool cmp(int a,int b){
    return a>b;  //此时为升序排列,如果写成a<b则为降序排列
}
int main(){
    vector<int> nums={2,6,4,7};
    sort(nums.begin(),nums.end(),cmp);
    return 0;
}

此时容器中的数字将按照升序排列

#include <bits/stdc++.h>
using namespace std;

bool cmp(int a,int b){
    return a>=b;  //此时为升序排列,如果写成a<b则为降序排列
}
int main(){
    vector<int> nums={2,6,4,7};
    sort(nums.begin(),nums.end(),cmp);
    return 0;
}

上述代码在有数字相同时无法正常运行。由于cmp返回时若a==b,则comp(a,b)==truecomp(b,a)==true与上述表格中要求comp(a,a)==false相违背,顾程序无法正常运行。
通俗解释为,sort依据comp返回值判定a是否应该排在b的前面,返回true则a在b前,由于comp(a,b)==truecomp(b,a)==true则a在b前,b在a前,产生歧义。排序出现异常。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值