簡體   English   中英

如何在兩個或多個數據結構中存儲應該相同的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM