复制类中定义的std :: map时出错

时间:2012-04-07 04:26:02

标签: c++ copy friend

我有一个用std::map作为容器的类。我想添加一个函数来复制两个对象之间的地图。由于地图被声明为该类的私有成员,因此我需要一个友元函数来执行此操作。这是我的代码:

class Data;
void copyData(Data &, Data &);

class Data
{
  private:
    map<int, int> _data;

  public:
    friend void copyData(Data &, Data&);
};

void copyData(Data &a, Data &b)
{
  std::copy(a._data.begin(), a._data.end(), b._data.begin());
}

main()
{
   // initialization here
   Data A, B;
   copyData(A, B);
}

但是在使用mingw32进行编译时会有很多警告。我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:2)

std::map<K,V>::value_type定义为std::pair<const K,V>。这可以确保std::map<K,V>::iterator对象不能用于分配密钥(否则您可以使用它来破坏容器不变量)。

这意味着映射迭代器不满足OutputIterator概念要求,您不能将它们用作std::copy()函数的第三个参数。同样,有很多情况会使代码中断,例如一个地图的关联比另一个更多。

此外,还有一种更容易编写函数的方法:

void copyData(Data &a, Data &b)
{
  b._data = a._data;
}