在boost unordered_multimap中循环遍历唯一键的最简单方法是什么。
例如我有这个:
std::set<int> used;
for (auto p : valuesMap)
{
if (used.count(p.first))
continue;
used.insert(p.first);
auto range = valuesMap.equal_range(p.first);
if (p.first)
for (auto v = range.first; v != range.second; ++v)
//do something;
}
有没有更好的方法来做到这一点。似乎无序地图应该已知唯一的密钥。
答案 0 :(得分:4)
您要做的是找到一种方法来获取某个键之后的迭代器。在multimap
我通常使用upper_bound
。但由于unordered_multimap
没有 - 我必须使用equal_range.second
:
for (auto iter=valueMap.begin();
iter!=valueMap.end();
iter=ValueMap.equal_range(iter->first)->second){
uniq_key=iter->first;
// Do whatever you want with uniq_key
}
但是你的例子对我来说很奇怪 - 因为你要考虑所有元素。如果我想编写你的代码,做你做的事情,我就是这样做的:
for (auto iter=valueMap.begin()
iter!=valueMap.end();
){ // Notice the lack of ++iter!!!
auto end=valueMap.equal_range(ier->first)->second;
for (;iter!=end;++iter)
// Do something
}