0

まったく同じキーのセットを持つことが保証されている2つのマップがある場合、両方のマップを効率的に反復するにはどうすればよいですか?

たとえば、次のマップがあるとします。

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 に答える