说我想创建一个包含学生矢量的大学课程:
class College {
vector<Student> _students;
}
除了学生矢量,我还想创建一个MAP,其中关键是学生,价值是他的成绩。
map<Student,size_t> _student_grades;
问题在于,在两个数据结构(地图和矢量)中保存同一学生的两个副本看起来效率低下。 我考虑过将矢量作为学生的“主要”数据结构,地图只包含指向学生及其等级的指针。
类似的东西:
map<Student*,size_t> _student_grades;
c的大缺点是,当我从向量中移除学生对象时,我应该立即将其从地图中删除,以避免指向“无”的指针。
我很想听到一些替代方案来解决问题或改进我的方法。
提前感谢。
答案 0 :(得分:1)
您可以跳过矢量并只使用地图:
class College {
std::map<Student,size_t> _student_grades;
}
这可以防止您必须维护并行数据结构。
您可以迭代地图键,例如:
std::map<Student, size_t>::iterator it_type;
for(it_type iterator = _student_grades.begin(); iterator != _student_grades.end(); iterator++)
{
// iterator->first = Student
// iterator->second = size_t
}
您可以测试学生是否在地图中:
if (_student_grades.find(some_student) == _student_grades.end())
{
// Student has no record in map yet.
}
在向量上使用地图会产生更多开销,与使用地图相比,维护两者的开销更少。