结构体+sort排序
2025-06-02 09:31:23
发布于:北京
上集:https://www.acgo.cn/discuss/rest/42967
已知我们要存储很多个数据,而且还是两个不同类型的数据,你会怎么办?
int age[105];
string name[105];
for(int i=0;i<n;i++){
cin>>name[i]>>age[i];
}
输入结果:
TOM 12
xmw 9
ddw 12
可是这样太麻烦了,如果想要排序会出错(排序后面讲)于是,C++便有了结构体。
结构体定义:
struct ddw{
};//注意,一定要在末尾打分号
结构体可以储存多个类型的元素,而且,只需要做一个数组,不像上面那样要多个数组。
如果像上面那样该怎么去写代码
(建议i从1开始,<=n)
struct ddw{
string name;
int age;
};
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].age;
}
return 0;
}
虽然比之前的代码更加麻烦,但是在后面的结构体排序很重要。
sort排序:
排序有很多种,比如选择排序,冒泡排序,插入排序,桶排序,归并排序,快速排序......但是sort是最简单的排序方法
事实上排序其实是算法
sort排序可以用最少的代码排序,过程如下:
int a[105];
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
简单几行代码就将一个数组排序完成,但这是从小到大,从大到小就需要多一点代码了。
bool cmp(ddw a,ddw b){
return a.age>b.age;
}
而主函数里,我们要加上cmp的调用。
sort(a+1,a+1+n,cmp);
cmp函数也可以再增加判断条件,比如有这样的案例:某医院要按照年龄排序,年龄大的先来,如果一样就按照编号顺序排序。
所有人都要按照编号排序。这样的话结构体里面要有姓名,年龄,和编号。
bool cmp(ddw a,ddw b){
if(a.age!=b.age)return a.age>b.age;
else return a.num<b.num;
}
有帮助,赞一个