如何在两个或多个数据结构中存储应该相同的对象

时间:2013-11-12 18:54:45

标签: c++ vector

说我想创建一个包含学生矢量的大学课程:

class College {

   vector<Student> _students;
}

除了学生矢量,我还想创建一个MAP,其中关键是学生,价值是他的成绩。

  map<Student,size_t> _student_grades;

问题在于,在两个数据结构(地图和矢量)中保存同一学生的两个副本看起来效率低下。 我考虑过将矢量作为学生的“主要”数据结构,地图只包含指向学生及其等级的指针。

类似的东西:

map<Student*,size_t> _student_grades;

c的大缺点是,当我从向量中移除学生对象时,我应该立即将其从地图中删除,以避免指向“无”的指针。

我很想听到一些替代方案来解决问题或改进我的方法。

提前感谢。

1 个答案:

答案 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.
}

在向量上使用地图会产生更多开销,与使用地图相比,维护两者的开销更少。