2016-03-19 24 views
2

因此,可以說,我宣佈一個unordered_map是這樣的:如何存儲/在地圖C++相同的密鑰接入多個值

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"]; 

該載體將被分配到輸出1,輸出2和輸出3?我很確定這對所有人來說都是一樣的矢量,但unordered_map如何決定哪一個?我怎樣才能讓vec1分配給output1,vec2分配給output2等等?

回答

6

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

+0

@Anton_Savin感謝您的回覆。我需要暫時避免使用multimaps,而是尋求一種方法來繞過正常的unordered_map上的這個問題。保持一個int計數器變量是否合理,我會爲unordered_map的每次添加增加一個int計數器變量,然後將計數器添加到其鍵值字符串中,如下所示:string fruit;水果+ =水果+計數器; my_map [fruit] = vec2; ? – user5482356

+0

@ user5482356:如果顯然愚蠢的「需要避免」的要求是你的老師的話,那麼一個好的方法就是實現多圖的額外功能。這並不難。 –

1

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

所以儘量地圖地圖:

示例代碼段:

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

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

所以更靈活地使用這種類型的你的情況的版本。而不是有序或無序的地圖。

相關問題