2012-09-25 43 views
0

如果我有两个保证具有完全相同的键的地图,如何有效地迭代这两个地图?使用相同的键有效地迭代多个地图

例如,说我有以下地图:

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]每个值考虑,我们正在有效地通过按键会秩序。有什么方法可以利用这一点吗?

回答

5

如果您是绝对确保密钥是相同的,你既可以映射遍历步调一致:

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

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

啊哈....当然。我现在很尴尬:/ –