在唯一键上提升 unordered_multimap 循环

gsf*_*gsf 4 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;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点。似乎无序映射应该已经知道唯一键。

rab*_*sky 5

您想要做的是找到一种方法来获取遵循某个键的迭代器。在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
}
Run Code Online (Sandbox Code Playgroud)

但是你的例子对我来说很奇怪 - 因为你确实检查了所有元素。如果我想写你的代码,做你所做的,我会这样做:

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
}
Run Code Online (Sandbox Code Playgroud)