簡體   English   中英

多圖在矢量圖上有什么優勢?

[英]What's the advantage of multimap over map of vectors?

如果我們可以創建矢量圖或集合圖,我不明白為什么存在多圖。 對我來說,唯一的區別是:

  • 使用multimap中的equal_range來獲取鍵的元素,並在向量的映射中,我們只需使用[]運算符並具有元素的向量。
  • multimap.insert(make_pair(key,value))使用multimap.insert(make_pair(key,value))在向量的映射中添加元素和map_of_vectors[key].push_back(value)

那么為什么要使用multimap呢? 對我來說,最好有一個向量而不是兩個迭代器來獲取一個鍵的所有值。

此問題也適用於vector和unordered_multimap的unordered_map。

我想說這取決於具有相同鍵的所有值是否具有您想要解決的關系。

例如,您是否經常使用鍵X遍歷所有元素,或將它們傳遞給函數,依此類推? 然后將它們放在單獨的容器中更方便,您可以直接進行尋址。

但是,如果你只有一個項目集合,它們可能共享相同的鍵值,為什么要在它們之間使用向量? 使用迭代器運行multimap比使用map for vector case的嵌套for循環更方便。

另一種看待這種情況的方法:如果每個鍵的多個條目非常常見,那么您的結構在地圖中的效率會更高。 如果他們很少發生,則相反。

multimap<x, y>map<x, vector<y>>之間存在許多重要差異

一旦你在multimap中插入了一個值,就會知道迭代器在你刪除它之前一直有效,這是一個非常強大的屬性,你不能用它來映射向量。

multimap<x,y>::iterator p=mymap.insert(make_pair(a,b));

迭代器在從映射中刪除之前一直有效,而在第二種情況下,每次向向量添加新條目時它都會失效。

另請注意, map<x, vector<y>>可能具有使用現有鍵設置的空值,而multimap不具有。

這些是表現不同的不同事物。

說實話,我想念一些語言中的multimap,而這些語言並沒有在他們的庫中提供。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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