簡體   English   中英

如何在地圖C ++中存儲/訪問同一個鍵的多個值

[英]How to store/access multiple values of the same key in a map C++

所以我可以說我聲明了一個像這樣的unordered_map:

unordered_map<string, vector<string>> my_map;

我有一個我想要存儲在其中的值列表,如下所示:

vector<string> vec1 = {"banana", "apple"}; 
vector<string> vec2 = {"banana", "banana"};
vector<string> vec3 = {"banana", "watermelon"};

如果我通過並將每個向量初始化到地圖,使用其第0個索引中的字符串作為鍵,如下所示:

my_map[vec1[0]] = vec1;
my_map[vec2[0]] = vec2;
my_map[vec3[0]] = vec3;

unordered_map是否會存儲所有三個向量,盡管它們具有相同的訪問密鑰? 如果我想訪問每個向量,有沒有一種方法可以按照上面列表中出現的順序執行此操作?

例如,如果我這樣做:

 vector<string> output1;
 vector<string> output2;
 vector<string> output3;

 output1 = my_map["banana"];
 output2 = my_map["banana"];
 output3 = my_map["banana"];

哪些向量將分配給output1,output2和output3? 我很確定它會為所有人提供相同的矢量但是unordered_map如何決定哪一個? 我怎樣才能使vec1被分配給output1,vec2到output2等?

std::unordered_map只為每個鍵存儲一個值 - 你分配給它的最后一個值,在你的情況下它是vec3 如果要為每個鍵存儲多個值,可以使用std::multimapstd::unordered_multimap

如果2個元素具有相同的鍵,則將打印第一個鍵值,而忽略其他鍵值。

所以試試地圖:

示例代碼段:

  std::multimap <int, xxx> stdBindListOuter;
  std::multimap <int, std::string>::iterator pos;
  std::multimap <int, xxx>::iterator posOuter;

xxx - >可以是用戶定義的..

因此,您可以更靈活地使用此類型的版本。 而不是有序或無序的地圖..

暫無
暫無

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

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