在 boost::unordered_multimap 中循环遍历 equal_range
Posted
技术标签:
【中文标题】在 boost::unordered_multimap 中循环遍历 equal_range【英文标题】:Loop through equal_range in a boost::unordered_multimap 【发布时间】:2016-11-14 10:22:32 【问题描述】:我正在尝试学习如何遍历从具有相同键的 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
【问题讨论】:
【参考方案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
是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
【讨论】:
我不确定我只映射了一个值,我可能映射了两个、三个或 n 个值。所以一个循环将是我的选择。我想知道在调用 equal_range 并遍历返回对之后,是否可以将所有值映射到它,包括最后一个 .. 检查我的编辑。 是的,谢谢。我试过了,它有效。我明白,但我想了解如果只有一个值映射到关键元素,这是如何工作的。从 equal_range 调用返回的 ret 就像 ret.first 将等于 ret.last ,所以根本不应该进入循环吗?这是如何工作的,这是我的困惑。 哦,好的。但是,如果 ret.first 是键映射的位置,而 ret.second 指向 sample 上的第一个位置(这将是 ),那将如何工作?您的意思是 ret.second 将指向密钥的第一次(也是唯一一次)之前的位置吗?另外,如果是这种情况, unordered_map 没有以任何特定方式排列,对吧?这将如何运作? 我的错误,如果只有一个匹配,ret.second 指向样本中的最后一个元素。以上是关于在 boost::unordered_multimap 中循环遍历 equal_range的主要内容,如果未能解决你的问题,请参考以下文章
在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?