在boost :: unordered_multimap中循环遍历equal_range

时间:2016-11-14 10:22:33

标签: c++ boost unordered-multimap

我正在尝试学习如何迭代从具有相同键的boost :: unordered_multimap返回的值。所以,我这样做了,

//隐藏App导航条,使用RN自己的导航条 - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.navigationController.navigationBar.hidden = YES; // self.navigationController.navigationBarHidden = YES; //这句是 **完全没** 个卵用 // [self.navigationController setNavigationBarHidden:YES animated:NO]; } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:NO]; } //恢复App导航条 - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; self.navigationController.navigationBar.hidden = NO; // self.navigationController.navigationBarHidden = NO; //这句是 **完全没** 个卵用 [self.navigationController setNavigationBarHidden:NO animated:NO]; }

我也许,

boost::unordered_multimap<string, string> sample;

我尝试获取对应于&#34;两个&#34;的值。所以我这样做了,

<"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");

我会得到值:2,因为这是映射的唯一值吗?我会第一次离开循环吗?我试图在线获得答案/关于提升文档,但我还没有成功。这可能是一个基本问题,但我正在努力学习。任何帮助将不胜感激。

TIA

-R

1 个答案:

答案 0 :(得分:0)

关于提升:equal_range(键&amp; 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