增强unordered_multimap循环通过唯一键

boost unordered_multimap loop over the unique keys

本文关键字:唯一 一键 循环 unordered multimap 增强      更新时间:2023-10-16

升压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
}