c++ - 在唯一键上 boost unordered_multimap 循环

标签 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;
}

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

最佳答案

你想要做的是找到一种方法让迭代器跟随某个键。在 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/

相关文章:

c++ - 构造函数中初始化列表的缩进是错误的

c++ - 用于 Linux 上 C++ 的带有 GUI 的调试器

c++ - 使用 Boost C++ 库将正则表达式替换为自定义替换

c++ - 使用大型整数对数据集有效地初始化 unordered_map

c++ - 枚举类的关系运算符重载

c++ - 捕获 boost 序列化存档异常

C++如何创建多态容器?

c++ - Unordered.map 插入问题与对键

c++ - 检查 C++ std::unordered_map 中是否存在键的最有效范例?

c++ - FFMPEG:初始化过滤器时 avfilter_graph_create_filter 方法失败