(1)定义一个集合类HashTable的对象stu_cour。在stu_cour中,key是sno,value是一个Vector(包含该学生所选的所有Course对象)。 (2)定义一个集合类HashTable的对象cour_stu。在cour_stu中,key是cno,value是一个Vector(包含选择该课程的所有Stuedent对象)。 (3)自己向stu_cour和cour_stu中添加元素。 (4)遍历stu_cour,打印出每一位学生的选课情况。 遍历cour_stu,打印出每一门课程被选的情况。
时间: 2024-03-23 18:41:11 浏览: 16
好的,以下是实现上述功能的代码,其中用到了C++11标准的unordered_map和vector容器:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
// 定义 Course 类
class Course {
public:
string cno; // 课程编号
string cname; // 课程名称
};
// 定义 Student 类
class Student {
public:
string sno; // 学生编号
string sname; // 学生姓名
vector<Course> courses; // 该学生所选的课程
};
// 定义 HashTable 类
class HashTable {
public:
unordered_map<string, vector<Course>> stu_cour; // 以学生编号为 key,以所选课程的 vector 为 value
unordered_map<string, vector<Student>> cour_stu; // 以课程编号为 key,以选择该课程的学生的 vector 为 value
};
int main() {
// 创建 HashTable 对象
HashTable table;
// 添加元素到 stu_cour 中
Course c1 = {"c1", "高等数学"};
Course c2 = {"c2", "线性代数"};
Course c3 = {"c3", "离散数学"};
Student s1 = {"s1", "张三", {c1, c2}};
Student s2 = {"s2", "李四", {c1, c3}};
Student s3 = {"s3", "王五", {c2, c3}};
table.stu_cour[s1.sno] = s1.courses;
table.stu_cour[s2.sno] = s2.courses;
table.stu_cour[s3.sno] = s3.courses;
// 添加元素到 cour_stu 中
table.cour_stu[c1.cno].push_back(s1);
table.cour_stu[c1.cno].push_back(s2);
table.cour_stu[c2.cno].push_back(s1);
table.cour_stu[c2.cno].push_back(s3);
table.cour_stu[c3.cno].push_back(s2);
table.cour_stu[c3.cno].push_back(s3);
// 遍历 stu_cour,打印出每一位学生的选课情况
for (auto it = table.stu_cour.begin(); it != table.stu_cour.end(); ++it) {
cout << "学生 " << it->first << " 选了以下课程:" << endl;
for (auto c : it->second) {
cout << "课程编号:" << c.cno << ",课程名称:" << c.cname << endl;
}
}
// 遍历 cour_stu,打印出每一门课程被选的情况
for (auto it = table.cour_stu.begin(); it != table.cour_stu.end(); ++it) {
cout << "课程 " << it->first << " 被以下学生选了:" << endl;
for (auto s : it->second) {
cout << "学生编号:" << s.sno << ",学生姓名:" << s.sname << endl;
}
}
return 0;
}
```
在上述代码中,我们首先定义了Course、Student和HashTable三个类,然后创建了一个HashTable对象table。接着,我们向stu_cour和cour_stu中添加了元素,然后使用for循环遍历了stu_cour和cour_stu并打印出结果。在输出结果时,我们使用了auto关键字和范围for循环来简化代码,以提高可读性和可维护性。