0

我正在尝试学习如何遍历从具有相同键的 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,因为这是唯一映射的值?我会第一次跳出循环吗?我正在尝试在线/在 boost 文档中获得答案,但我没有成功。这可能是一个基本问题,但我正在努力学习。任何帮助,将不胜感激。

TIA

-R

4

1 回答 1

1

关于boost: 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是第一个映射的位置,vkeywhileitr2代表最后一个。所以你的代码工作正常:

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
于 2016-11-14T10:38:06.390 回答