假设我有以下内容:
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() ));
最明显的解决方案就是自己写一个循环:
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.
| 归档时间: | 
 | 
| 查看次数: | 4132 次 | 
| 最近记录: |