详细题解 结构体排序问题 (点个赞吧)
2026-01-25 10:33:11
发布于:浙江
12阅读
0回复
0点赞
思路:
1.定义结构体;
2.输入结构体;
3.给每个结构体标上学号;
4.定义排序规则;
5.排序
6.输出结构体;
代码如下
#include<bits/stdc++.h>
using namespace std;
struct t{
long long age,xh;
double avg;
char name[25];
};
//定义结构体
t a[100005];
bool _1(t x,t y)
{
//若平均分都相同,则按照年龄进行升序排序
if(x.avg == y.avg)
{
//若年龄都相同,则按照姓名字典序进行升序排序
if (x.age == y.age)
{
if (strcmp(x.name,y.name) == 0)
{
return x.xh < y.xh;
}
if (strcmp(x.name,y.name) > 0)
{
return false;
}
if (strcmp(x.name,y.name) < 0)
{
return true;
}
}
//若年龄不相同,则按照升序排序
return x.age < y.age;
}
//若平均分不相同,则按照降序排序
return x.avg > y.avg;
}
//定义排序规则
int main ()
{
long long n;
cin >> n;
for (long long i = 0; i < n; i ++)
{
cin >> a[i].name >> a[i].age >> a[i].avg;
//给学号赋值
a[i].xh = i +1;
}
sort(a,a+n,_1);
//输出
for (int i = 0; i < n; i ++)
{
cout << a[i].name << " " << a[i].age << " " ;
//平均分保留2位小数
printf("%.2lf",a[i].avg);
cout << " " <<a[i].xh<<endl;
}
}
这里空空如也

有帮助,赞一个