如果我有两张地图可以保证拥有完全相同的密钥集,那么如何有效地迭代两张地图呢?
例如,假设我有以下地图:
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]
的每个值似乎相当浪费。我们有什么办法可以利用这个吗?
答案 0 :(得分:5)
如果您完全确定键是相同的,则可以锁定地迭代这两个映射:
auto it1 = iMap.begin();
auto it2 = vMap.begin();
while (it1 != iMap.end())
{
it2->second.push_back(*it1);
++it1;
++it2;
}