假设我有以下内容:
std::map<KEY,VALUE> m1;
std::map<KEY,VALUE> m2;
将m1
的所有键/值对移动到m2
的最直接方法是什么?
我希望:
我是否需要<algorithm>
的来电组合?
James Kranze的解决方案满足了我的要求。
for( const auto& p : m1 )
m2[ p.first ] = p.second;
m1.clear();
Joachim Pileborg的建议仅在m2和m1没有相同的密钥时才有效(即m2的值不会被同一密钥的m1值覆盖)
std::move( m1.begin(), m1.end(), std::inserter( m2, m2.begin() ));
答案 0 :(得分:5)
std::move
怎么样?
答案 1 :(得分:5)
最明显的解决方案就是自己写一个循环:
for ( std::map<KEY, VALUE>::const_iterator current = m1.begin();
current != m1.end();
++ current ) {
m2[current->first] = current->second;
}
否则,我认为以下内容应该有效:
std::copy( m2.begin(), m2.end(), std::inserter( m1, m1.end() ) );
m2.clear();
m2.swap( m1 );
这并不完全直观,我毫不犹豫地使用它 评论,因为:
由于std::map
没有push_back
或push_front
,您需要
使用更通用的insterter
,而后者又需要迭代器
指定插入的位置。 std::map
除外
将此迭代器视为“提示”,因为它通常不会成为一个
好的提示,它将被忽略。
您实际上必须从m2
复制到m1
,因为插入到m1
map不会覆盖任何现有值,并且当密钥存在时
在两个地图中,您希望保留{{1}}的值。