2016-11-14 105 views
0

我在學習如何遍歷從boost :: unordered_multimap返回的具有相同鍵的值。所以,我這樣做,在boost :: unordered_multimap中循環遍歷equal_range

boost::unordered_multimap<string, string> sample;

在,我有可能,

<"one", "1">, 

<"one", "11">, 

<"two", "2">, 

<"three", "3">, 

<"three", "3">, 

<"three", "33">, 

<"three", "333">, 

,我試圖讓對應於 「二」,所以我做了這個值,

std::pair<boost::unordered_multimap<string, string>::iterator, boost::unordered_multimap<string, string>::iterator> > ret = sample.equal_range("two"); 

我重複遍歷它就好像,

for(boost::unordered_multimap<string, string>::iterator> it = ret.first ; it != ret.second; it++) 
{ 
    cout<<"The values mapped are : "<<*it->second<<"\n"; 
} 

我會得到值:2,因爲這是映射的唯一值?我會第一次擺脫循環嗎?我試圖在線獲取答案/關於boost文檔,但我沒有成功。這可能是一個基本問題,但我正在努力學習。任何幫助,將不勝感激。

TIA

-R

回答

0

關於升壓:equal_range(關鍵& v鍵):

用法:

std::pair<iterator, iterator> Equal_Range = Unordered_Map.equal_range("key"); 

返回:

一個映射表包含所有由映射的結果KEY:keyEqual_Range.first代表結果表中的第一個位置,而Equal_Range.second代表最後一個位置。 特殊情況:如果只有一個元素匹配,ret.first指向key映射的位置,ret.second指向原始圖上的最後一個位置:即original_map.last

因此,通過使用equal_range(key& vkey),你已經得到的結果表std::pair<itr1, itr2>,存儲所有你找到映射的結果,並itr1vkey映射而itr2表示最後的第一個位置。所以,你的代碼工作正常:

for(auto Itr = ret.first; Itr != ret.second; ++Itr) 
     std::cout << "The values mapped are : " << Itr->second << std::endl; 

測試用例:key = "three"

The values mapped are : 3 
The values mapped are : 3 
The values mapped are : 33 
The values mapped are : 333 
+0

我不知道,我只有一個值映射,我可能有兩個,三個或n個值映射。所以一個循環將是我的選擇。我想知道是否在調用equal_range並遍歷返回對後,如果我將所有值映射到它包括最後一個。 – codeworks

+0

檢查我的**編輯**。 –

+0

是的,謝謝你。我試了一下,它的工作原理。我明白,但我想了解如果只有一個值映射到關鍵元素,這是如何工作的。從equal_range調用返回的ret會像ret.first等於ret.last,因此循環不應該正確輸入?這是如何工作的,這是我的困惑。 – codeworks