#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;