在 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
}
关于c++ - 在唯一键上 boost unordered_multimap 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19716202/