使用相同的键有效地迭代多个映射

时间:2012-09-25 16:21:23

标签: c++ optimization map iteration

如果我有两张地图可以保证拥有完全相同的密钥集,那么如何有效地迭代两张地图呢?

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

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

在某些时候,他们最终都拥有完全相同的密钥组。我现在需要根据相应的vMap值更新iMap的所有值。首先想到的是:

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

然而,考虑到我们正在按顺序有效地浏览密钥,我们必须查找vMap[n]的每个值似乎相当浪费。我们有什么办法可以利用这个吗?

1 个答案:

答案 0 :(得分:5)

如果您完全确定键是相同的,则可以锁定地迭代这两个映射:

auto it1 = iMap.begin();
auto it2 = vMap.begin();

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