[英]How store objects that should be identical in two or more data structures
假設我要創建一個包含向量學生的大學班:
class College {
vector<Student> _students;
}
除了學生向量之外,我還想創建一個MAP,其中關鍵是學生,而值是他的成績。
map<Student,size_t> _student_grades;
問題在於,在兩個數據結構(地圖和向量)中都保存同一學生的兩個副本似乎有點效率低下。 我考慮過將向量作為學生的“主要”數據結構,並且地圖將僅包含指向學生及其等級的指針。
就像是:
map<Student*,size_t> _student_grades;
c的最大缺點是,當我從向量中刪除一個學生對象時,我也應該立即從地圖中將其刪除,以避免指向“無”的指針。
我很想聽聽一些替代問題的解決方案或對我的改進。
提前致謝。
您可以跳過矢量而僅使用地圖:
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.
}
在矢量上使用地圖會產生更多開銷,但與同時維護兩個地圖相比,僅使用地圖會減少開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.