在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
的內容,以演示深拷貝的效果。