0

假设我想创建一个包含学生向量的大学课程:

class College {

   vector<Student> _students;
}

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

  map<Student,size_t> _student_grades;

问题是在两种数据结构(地图和向量)中保存同一个学生的两个副本看起来有点低效。我考虑过让向量成为学生的“主要”数据结构,而地图将只包含一个指向学生及其成绩的指针。

就像是:

map<Student*,size_t> _student_grades;

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

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

提前致谢。

4

1 回答 1

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

在向量上使用映射的开销更大,但与维护两者相比,仅使用映射的开销更少。

于 2013-11-12T20:49:25.620 回答