阅读量:0
在C++中,要实现std::map
的深拷贝,你需要遍历原始map
,并将每个元素复制到新的map
中
#include<iostream> #include <map> #include<string> // 假设我们有一个自定义类 Person class Person { public: std::string name; int age; // 构造函数 Person(const std::string& name, int age) : name(name), age(age) {} // 拷贝构造函数 Person(const Person& other) : name(other.name), age(other.age) {} }; int main() { // 创建一个包含Person对象的 map std::map<int, Person> original_map; original_map[1] = Person("Alice", 30); original_map[2] = Person("Bob", 25); // 实现深拷贝 std::map<int, Person> copied_map; for (const auto& pair : original_map) { copied_map.insert(std::make_pair(pair.first, Person(pair.second))); } // 修改原始 map 中的一个元素,以演示深拷贝的效果 original_map[1].name = "Alicia"; // 输出两个 map 的内容 std::cout << "Original map:"<< std::endl; for (const auto& pair : original_map) { std::cout<< pair.first << ": "<< pair.second.name << ", "<< pair.second.age<< std::endl; } std::cout << "Copied map:"<< std::endl; for (const auto& pair : copied_map) { std::cout<< pair.first << ": "<< pair.second.name << ", "<< pair.second.age<< std::endl; } return 0; }
在这个例子中,我们首先创建了一个包含Person
对象的original_map
。然后,我们使用for
循环遍历original_map
,并将每个元素复制到copied_map
中。注意,我们使用Person(pair.second)
来创建一个新的Person
对象,这样就会调用Person
的拷贝构造函数,从而实现深拷贝。
最后,我们修改original_map
中的一个元素,并输出两个map
的内容,以演示深拷贝的效果。