0

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

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

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]然而,考虑到我们正在有效地按顺序遍历键,我们必须查找每个值似乎相当浪费。我们有什么办法可以利用这一点吗?

4

1 回答 1

5

如果您绝对确定键是相同的,则可以同步遍历两个映射:

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

while (it1 != iMap.end())
{
    it2->second.push_back(*it1);
    ++it1;
    ++it2;
}
于 2012-09-25T16:24:05.483 回答