【问题标题】:Efficiently iterate multiple maps with the same keys使用相同的键有效地迭代多个映射
【发布时间】:2012-09-17 05:09:12
【问题描述】:

如果我有两个保证具有完全相同的键集的映射,我如何有效地遍历两个映射?

例如,假设我有以下地图:

std::map<std::string, int> iMap;
std::map<std::string, std::vector<int> > vMap;

在某些时候,它们最终会得到完全相同的一组键。我现在需要根据对应的iMap 值更新vMap 的所有值。首先想到的是这样的:

typedef map<string, int> map_t;
BOOST_FOREACH(map_t::value_type &p, iMap) {
  vMap[p.first].push_back(p.second);
}

但是,考虑到我们正在按顺序有效地遍历键,我们必须查找vMap[n] 的每个值似乎相当浪费。我们有什么办法可以利用这一点?

【问题讨论】:

    标签: c++ optimization map iteration


    【解决方案1】:

    如果您完全确定密钥是相同的,您可以同步迭代这两个映射:

    auto it1 = iMap.begin();
    auto it2 = vMap.begin();
    
    while (it1 != iMap.end())
    {
        it2->second.push_back(*it1);
        ++it1;
        ++it2;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 2020-03-12
      • 1970-01-01
      • 2021-12-18
      • 2023-03-28
      • 1970-01-01
      • 2012-07-17
      • 2010-11-29
      相关资源
      最近更新 更多