[英]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>
,其中存儲了找到的所有映射結果,並且itr1
是vkey
映射的第一個位置,而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.