[英]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::multimap
或std::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.