使用C++结构实现数据的分组和管理

一、结构体定义和使用

在C++中,结构体可以用于存储不同类型的数据,在一个数据结构中组合起来。比如,我们可以定义一个结构体来存储学生的姓名、年龄和成绩:

struct Student {
    string name;
    int age;
    double score;
};

我们可以通过定义一个结构体变量来存储一个学生的信息:

Student stu1;
stu1.name = "Tom";
stu1.age = 18;
stu1.score = 95.5;

结构体也可以用数组的方式来创建多个结构体变量:

Student stu_list[3];
stu_list[0].name = "Tom";
stu_list[0].age = 18;
stu_list[0].score = 95.5;
stu_list[1].name = "Jerry";
stu_list[1].age = 19;
stu_list[1].score = 87.5;
stu_list[2].name = "Lisa";
stu_list[2].age = 20;
stu_list[2].score = 90.0;

我们可以通过遍历数组来输出所有结构体变量:

for(int i=0; i<3>

以上代码的输出结果为:

Name: Tom, Age: 18, Score: 95.5
Name: Jerry, Age: 19, Score: 87.5
Name: Lisa, Age: 20, Score: 90

二、结构体排序

如果我们想要按照学生成绩的高低来排序,可以使用C++的自定义排序函数和STL中的sort函数。

bool cmp(Student a, Student b) {
    return a.score > b.score;
}
sort(stu_list, stu_list+3, cmp);

以上代码中,cmp为自定义的排序函数,用于比较两个学生的成绩。sort函数用于对stu_list数组进行排序。排序后的输出结果为:

Name: Tom, Age: 18, Score: 95.5
Name: Lisa, Age: 20, Score: 90
Name: Jerry, Age: 19, Score: 87.5

三、结构体分组

如果我们想要按照学生的年龄来分组,我们可以定义一个包含多个学生的结构体数组,并使用vector来存储不同年龄段的学生信息:

struct AgeGroup {
    int age;
    vector students;
};
vector age_groups;
for(int i=0; i<3>

以上代码中,我们遍历了所有学生(stu_list数组),根据每个学生的年龄找到对应的年龄组。如果年龄组不存在,我们创建一个新的年龄组(age_group),并将学生加入该组,如果年龄组已存在,我们直接将学生加入该年龄组的学生列表中(age_groups[j].students)。

我们可以将分组后的信息输出到控制台:

for(int i=0; i

以上代码的输出结果为:

Age: 18
Name: Tom, Age: 18, Score: 95.5
Age: 19
Name: Jerry, Age: 19, Score: 87.5
Age: 20
Name: Lisa, Age: 20, Score: 90

四、结构体的嵌套使用

在上面的例子中,我们使用了两个结构体:Student和AgeGroup。其实,我们也可以在结构体中嵌套使用其他结构体:

struct Course {
    string name;
    vector students;
};
struct Teacher {
    string name;
    vector courses;
};

以上代码中,我们创建了一个Course结构体,用于存储课程信息,包括课程名称和选修该课程的学生列表。我们还创建了一个Teacher结构体,用于存储老师的信息,包括老师的姓名和教授的课程列表。

我们可以使用如下方式来初始化Teacher结构体变量:

Teacher teacher;
teacher.name = "Mr. Smith";
Course course1;
course1.name = "Math";
course1.students = {stu1, stu2};
Course course2;
course2.name = "Physics";
course2.students = {stu3, stu4};
teacher.courses = {course1, course2};

以上代码中,我们使用了之前定义的stu1、stu2、stu3、stu4四个学生结构体变量。

我们可以使用类似之前的方式来遍历和输出Teacher结构体中的信息:

cout << "Teacher: " << teacher.name << endl;
for(int i=0; i

以上代码的输出结果为:

Teacher: Mr. Smith
Course: Math
Name: Tom, Age: 18, Score: 95.5
Name: Jerry, Age: 19, Score: 87.5
Course: Physics
Name: Lisa, Age: 20, Score: 90
Name: Kate, Age: 19, Score: 82.5

总结

在C++中,使用结构体可以方便地组合不同类型的数据,并对数据进行分组、排序、嵌套等一系列操作。这些操作能够方便地对现实中的数据进行模拟和处理,为C++工程师提供了强有力的工具。

本文链接:https://my.lmcjl.com/post/15728.html

展开阅读全文

4 评论

留下您的评论.