C++排序函数中cmp()比较函数详解

2023-05-16

  1. 整型数据比较
bool cmp(int a,int b){
    return a < b;
}
int a[10];  
sort(a,a+10,cmp);
  1. 实型数据比较
bool cmp(float a,float b){
    return a < b;
}
int a[10];  
sort(a,a+10,cmp);
  1. 结构体类型比较

题目:有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
题目链接( 九度OJ的):http://ac.jobdu.com/problem.php?pid=1061
核心代码:

struct student
{
    int grade;
    char name[101];
    int age;
}stu[1001];


bool cmp(student a,student b)
{
    int t = strcmp(a.name,b.name);
    if(a.grade != b.grade) 
        return a.grade < b.grade; 
    else if(t != 0)
        return t < 0; 
    else
        return a.age < b.age;
}

sort(stu,stu+n,cmp);

关于cmp函数参数中的&符号(转)

关于sort函数中的cmp函数有着不同的写法,以刚刚的整形元素比较为例
还有人是这么写的:

bool cmp(const int &a, const int &b){  
    return a>b;  
}  

int a[10];  
sort(a,a+10,cmp); 

思考:int 和const int&有什么区别呢?
原来:作为函数参数:int这种写法是值传递,const int&则是引用传递
“值传递”——由于函数将自动产生临时变量用于复制该参数,效率较低。
“引用传递”仅借用一下参数的别名而已,不需要产生临时对象。效率较高
tips:“引用传递”有可能改变参数,const修饰可以解决这个问题。
查看更多:http://blog.sina.com.cn/s/blog_76e067cf01019q5r.html


补充知识:C中qsort中的cmp()与sort的cmp()对比(以int为例)

名称返回值类型语句
qsort(c)intreturn a - b
sort(c++)boolreturn a < b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++排序函数中cmp()比较函数详解 的相关文章

随机推荐