在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;
}
有更好的方法做到这一点。似乎无序映射应该已经知道唯一键。
您想要做的是找到一种方法来获取遵循特定键的迭代器。在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
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句