使用指针作为键复制 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;
   }
}