簡體   English   中英

在boost :: unordered_multimap中遍歷equal_range

[英]Loop through equal_range in a boost::unordered_multimap

我正在嘗試學習如何迭代從boost :: unordered_multimap返回的具有相同鍵的值。 所以,我做到了

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,因為這是唯一映射的值? 我會第一次擺脫循環嗎? 我正在嘗試在線獲取/關於增強文檔的答案,但是我沒有成功。 這可能是一個基本問題,但我正在嘗試學習。 任何幫助,將不勝感激。

TIA

-R

關於增強:equal_range(key&vkey):

用法:

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

返回:

映射表包含所有通過KEY: key映射的結果。 Equal_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

暫無
暫無

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

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