0

我有一个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编译时有很多警告。我该如何正确地做到这一点?

4

1 回答 1

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;
}
于 2012-04-07T05:51:46.943 回答