我有一个用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进行编译时会有很多警告。我该如何正确地做到这一点?
答案 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;
}