代码之家  ›  专栏  ›  技术社区  ›  Frank

如何使用STD:复制一张地图到另一张?

  •  19
  • Frank  · 技术社区  · 14 年前

    我想把一个STD:map的内容复制到另一个。我能用吗 std::copy 为了这个?显然,以下代码不起作用:

    int main() {
      typedef std::map<int,double> Map;
      Map m1;
      m1[3] = 0.3;
      m1[5] = 0.5;
      Map m2;
      m2[1] = 0.1;
      std::copy(m1.begin(), m1.end(), m2.begin());
      return 0;
    }
    

    这不起作用,因为 copy 会打电话的 operator* m2.begin() 将其“取消引用”并指定一个值(所有值都属于类型 std::pair<const int, double> )然后它会呼叫 operator++ 移到下一个空格 m2 . 这两个操作都不起作用,因为 const 在里面 const int 并且没有为任何新元素保留空间。

    有什么办法可以使它和 STD:复制 ?

    谢谢!

    2 回复  |  直到 11 年前
        1
  •  70
  •   Billy ONeal IS4    11 年前

    你可以用GMAN的答案——但问题是, 为什么? 你想用吗 std::copy ?应该使用成员函数 std::map<k, v>::insert 相反。

    m2.insert(m1.begin(), m1.end());
    
        2
  •  20
  •   GManNickG    14 年前

    你需要一个 insert iterator :

    std::copy(m1.begin(), m1.end(), std::inserter(m2, m2.end()) );
    

    inserter 在中定义 <iterator> . 它需要一个插入的位置(因此 m2.end() ,并返回 insert_iterator