#Z0510. [伴随编程]结构体数组的排序简单版
[伴随编程]结构体数组的排序简单版
程序:
#include <iostream>
#include <string>
using namespace std;
struct Student {
string name;
int score[4];
};
int main() {
Student stu[3];
for (int i = 0; i < 3; i++) {
cin >> stu[i].name;
for (int j = 0; j < 4; j++) {
cin >> stu[i].score[j];
}
}
return 0;
}
在这里我们想公布成绩单,按照姓名的字典序升序排列。 这时候,要使用 sort 函数,需要先引入 <algorithm>
:
因为我们的 Student 类型是自己用结构体定义出来的,他的大小关系是没有默认定义的,所以我们要在 main 函数之前,结构体 Student 的定义之后,自己定义一个用于比较的 cmp 函数:
bool cmp(Student x, Student y) {
return x.name < y.name;
}
接下来,我们只要在完成读入后,以 cmp 为排序依据调用一下 sort并把被排序的学生数组传入一下就可以了:
sort(stu, stu + 3, cmp);
最后,让我们输出一下排序后的学生列表:
for (int i = 0; i < 3; i++) {
cout << stu[i].name << ": ";
for (int j = 0; j < 4; j++) {
cout << stu[i].score[j] << " ";
}
cout << endl;
}
现在点击 运行,输入三个学生的名字和四个成绩,看一看排序后的结果是不是符合预期的呢?
如果要按字典序降序排列,只需要将 cmp 函数中:
return x.name < y.name;
改为
return x.name > y.name;