【发布时间】:2019-11-13 07:46:06
【问题描述】:
在我的作业中,我需要复制一张地图,所以如果我在 mapB 中更改某些内容,mapA 也会发生相同的更改,但不知道如何去做。
我四处搜寻,发现最接近的是:Shallow copy of a Map in Java 但遗憾的是这是在 java 中,而不是在 C++ 中。
我想过这样的事情,但它不起作用。为什么,什么是正确的代码?
class Mymap
{
private:
std::map <int, int> *PM;
public:
Mymap(std::map <int, int>* x)
{
PM = new std::map<int,int>(x);
}
};
int main()
{
std::map<int, int> mapA;
Mymap mapB(mapA);
return 0;
}
【问题讨论】:
-
你只需要
Mymap(std::map <int, int> &x) : PM{&x} { }。 -
重点是
PM = new std::map<int,int>(*x);获取了地图的深层副本。 (你写的代码甚至不会编译)。 -
也许你需要一个指针映射?然后此类地图的副本将包含指向相同对象的值。
-
您想要反映对 map 的更改,还是对地图元素的更改?微妙不同的东西! (例如,当你添加一个新元素时会发生什么?)
标签: c++ dictionary pointers reference shallow-copy