4

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

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

4

1 回答 1

6

您想要做的是找到一种方法让迭代器遵循某个键。在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
}
于 2013-10-31T20:54:40.093 回答