提问人:user11508332 提问时间:8/2/2020 最后编辑:Aykhan Hagverdiliuser11508332 更新时间:8/2/2020 访问量:277
以指针为键复制 std::map
copying std::map with pointer as key
问:
如果我有以下 C++ 类:
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" }
}
}
由此,完全相同的地址将存储在密钥中,但我不确定如何使密钥指向不同的地址,但仍然指向相同的内容。我知道将键作为指针似乎很奇怪,但我的作业中有一个特定的原因,我需要这样做。
答:
3赞
Łukasz Ślusarczyk
8/2/2020
#1
通过 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;
}
}
评论
2赞
1201ProgramAlarm
8/2/2020
你可以通过使用一个基于范围的for循环来简化这一点。
0赞
Łukasz Ślusarczyk
8/2/2020
原始代码看起来像C++98,所以让我们接近作者可能使用的编译器。
0赞
user11508332
8/2/2020
我很确定我使用的编译器是现代的 - 你介意展示如何使用更现代的技术来做到这一点吗?
0赞
1201ProgramAlarm
8/2/2020
原始代码看起来像一堆无法编译的东西。问题本身没有标有特定的语言版本(例如 c++98),因此假设使用当前版本的语言来回答(这在 C++ 标签 wiki 中进行了解释)。
上一个:C++ 如何使用复制构造函数
评论
mark