在唯一键上提升unordered_multimap循环

时间:2013-10-31 20:37:48

标签: c++ boost unordered-map

在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;
}

有没有更好的方法来做到这一点。似乎无序地图应该已知唯一的密钥。

1 个答案:

答案 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
}