使用指针作为键复制 std::map
copying std::map with pointer as key
如果我有以下 C++ class:
template <typename T>
class my_class {
public:
private:
struct assessment {
int mark;
String grade;
} std::map<T*, mark> class_map;
}
如果我使用复制构造函数进行深度复制,我将如何确保键中指针的内容被复制,同时确保每个键与值匹配到相同的评估结构?目前我有:
my_class(my_class const& other) {
typename std::map<T*, mark>::iterator it = other.class_map.begin();
while (it != other.class_map.end()) {
class_map[it->first] = Struct assessment { 70, "Credit" }
}
}
据此,密钥中将存储完全相同的地址,但我不确定如何使密钥指向不同的地址,但仍指向相同的内容。我知道将键作为指针似乎很奇怪,但在我的作业中有一个特定的原因需要这样做。
通过new和T的拷贝构造函数创建新的T对象。但请记住,地图中的顺序将在复制的地图中丢失。
my_class(my_class const& other) {
auto it = other.class_map.begin();
while (it != other.class_map.end()) {
T* newKey = new T(*it->first);
class_map[newKey] = it->second;
++it;
}
}
如果我有以下 C++ class:
template <typename T>
class my_class {
public:
private:
struct assessment {
int mark;
String grade;
} std::map<T*, mark> class_map;
}
如果我使用复制构造函数进行深度复制,我将如何确保键中指针的内容被复制,同时确保每个键与值匹配到相同的评估结构?目前我有:
my_class(my_class const& other) {
typename std::map<T*, mark>::iterator it = other.class_map.begin();
while (it != other.class_map.end()) {
class_map[it->first] = Struct assessment { 70, "Credit" }
}
}
据此,密钥中将存储完全相同的地址,但我不确定如何使密钥指向不同的地址,但仍指向相同的内容。我知道将键作为指针似乎很奇怪,但在我的作业中有一个特定的原因需要这样做。
通过new和T的拷贝构造函数创建新的T对象。但请记住,地图中的顺序将在复制的地图中丢失。
my_class(my_class const& other) {
auto it = other.class_map.begin();
while (it != other.class_map.end()) {
T* newKey = new T(*it->first);
class_map[newKey] = it->second;
++it;
}
}