假设我有两个相同类型的地图,第二个地图的一组键是第一个地图的键的子集。我想用第二个映射中的值更新第一个映射值(仅适用于第二个映射包含的键)。
我已经编写了一个简单的循环来执行此操作,但我想知道是否有更好的方法使用STL算法编写它。
代码示例:
using PersonAgeMap = std::map<std::string, int>;
PersonAgeMap map1;
map1.insert(std::make_pair("John", 23));
map1.insert(std::make_pair("Liza", 19));
map1.insert(std::make_pair("Dad", 45));
map1.insert(std::make_pair("Granny", 77));
PersonAgeMap map2;
map2.insert(std::make_pair("John", 24));
map2.insert(std::make_pair("Liza", 20));
//simple cycle way
for (const auto& person: map2)
{
map1[person.first] = person.second;
}
//is there some another way of doing this using STL algorithms???
for (const auto& person: map1)
{
std::cout << person.first << " " << person.second << std::endl;
}
输出:
Dad 45
Granny 77
John 24
Liza 20
答案 0 :(得分:2)
这不会短得多,但是当价值比int
更复杂时,效率可能更高:
for( const auto &p : map2 ) {
auto r = map1.emplace( p );
if( !r.second ) r.first->second = p.second;
}
PS在评论中说你map2
是map1
的一个子集,那么你的方法可能是最简单的,而且效率也不会低于我的。
答案 1 :(得分:1)
如果您只想合并它们并保留map2中的元素:
std::swap(map1, map2);
map1.insert(map2.begin(), map2.end());
答案 2 :(得分:0)
似乎没有比简单循环更清晰,更好的方法了。
感谢大家。