2012-06-01 85 views
1

我已經定義了一個地圖不能在兩個鍵值

boost::unordered_map<"std::string,std::string">m_mapABC ; 

而且我在IT賣場值就像m_mapABC [strValue1] = strValue2一個地圖是一樣的;

並假設我將10個條目存儲到地圖中。在這種情況下,可以使用相同的鍵值來存儲10個不同的值。或者每次都會重寫...我想它會。
在這種情況下使用std::pair會幫助我猜。

std::map<"std::string, std::pair<"std::string", bool>>myMap2 

std::pair可以有2項值相等(我想我是對的)...什麼將是在每種情況下的布爾值,將它在第一種情況和FALSE,第二次或副爲TRUE反之亦然?

我也聽說過std::tupleboost::tuple,其中可以使用單個密鑰來存儲不同的值。

我不是如何遍歷它們很清楚...我需要幫助

回答

5

如果要將多個值與單個密鑰關聯,請使用std::multimap(或std::unordered_multimap)而不是std::map

在某些情況下,可以使用std::map<key_type, std::vector<mapped_type> >代替(個人而言,我經常會發現這種情況更好)。

+1

不是使用'multimap',而是使用'map >',這是一個很好的建議,並且在大多數情況下它可以達到目的。 – iammilind

3

如果要存儲具有相同密鑰的多個項目,則應使用multimap(也適用於​​變體)。

下面應該工作:

std::multimap<std::string,int> mm; 
for(int i = 0; i != 10; ++i) 
    mm.insert(make_pair("hello world"), i); 

和你的多重映射應包含十個條目與關鍵的「hello world」和10個不同的值。