C++关于对复杂数据类型排序的比较器

更新时间:2023-07-21 09:20:42 阅读: 评论:0

C++关于对复杂数据类型排序的⽐较器何必再说
知识点⼩结
对于排序问题,我们可以⾃⼰写基于不同原理的排序⽅法,如冒泡排序,快排等。但在实际应⽤中,我们不可能每次都⾃⼰写排序,这⾥我们可以C++在algorithm包中定义好的sort()函数进⾏排序。但是,不论我们是⾃⼰⼿写排序,还是使⽤已有的sort函数,在⾯对复杂的数据类型,⽐如⾃⼰定义的结构体时,我们就有必要⾃⼰定义⼀个⽐较器,否则⽆法进⾏排序。对于sort()函数来说,其默认是按升序排序,我们可以⾃定义⽐较器来改变它。代码如下。
#include <iostream>
#include <algorithm>
//需要引⼊algorithm头⽂件,因为sort()函数包含在这个头⽂件⾥
using namespace std;
struct student
{
string name;
int socre;
int id;
乔巴头像
};
bool stuid_cmp(student &st1, student &st2)
山楂的英文
{
return st1.id > st2.id;
}
int main()
{
student stlist[] = {
{"jack", 85, 1},
{"kalvin", 86, 3},
{"taffy", 78, 2}
};
突发事件
sort(stlist, stlist+3, stuid_cmp);
for(int i=0; i<3; i++)
cout << stlist[i].id <<" " << stlist[i].name
<<" " << stlist[i].socre << endl;
return 0;
}
幼儿园区角活动观察记录表运⾏结果如下所⽰:
以上是单独写了⼀个⽐较器的⽅法,这种⽅法对于sort这类可以接受⼀个bool类型的值作为排序标准的函数⽐较适⽤。但是在今后的使⽤过程中,我们还会遇到诸如将复杂数据类型放⼊堆等的数据结构中的情况。每次单独重写⽐较器不是那么直观,我们可以直接在结构体当中就定义⽐较顺序。这⾥就涉及到运算符的重载。需要对运算符进⾏重载的原因,是基本的运算符是不能够⽐较复杂的结构体的,重载后相当于告知运算符如何⽐较⾃定义的结构体。具体来看下⾯的代码:
#include <iostream>
#include <algorithm>
using namespace std;
struct student
外部效度{
string name;
int score;
木瓜泡酒int id;
//重载<;号,使得<;号能够⽐较结构体,也可定义成反序
bool operator<(const student& st1)const
{
return score < st1.score;
}
};
int main()
{
student stlist[] = {
{"jack", 85, 1},
{"kalvin", 86, 3},
{"taffy", 78, 2}
};
//这⾥由于已经在结构体声明时就定义了如何⽐较⼤⼩,所以  //sort函数就不需要再传⼊第三个参数了
sort(stlist, stlist+3);
for(int i=0; i<3; i++)
cout << stlist[i].id <<" " << stlist[i].name
<<" " << stlist[i].score << endl;
return 0;
湖人队员名单
}

本文发布于:2023-07-21 09:20:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1108662.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:排序   运算符   函数   定义
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图