條目我有一張地圖,宣佈爲要刪除嵌套地圖在C++
std::map< std::string, std::map<int,std::list<pointers*> > myMap; // in c++.
我可以知道,以刪除在此地圖中的條目,它是足以通過調用myMap.erase(entryToBeDeleted) ?或者我應該去遍歷子映射先刪除所有東西,然後刪除條目?
要添加上,內地圖與INT作爲鍵和值
條目我有一張地圖,宣佈爲要刪除嵌套地圖在C++
std::map< std::string, std::map<int,std::list<pointers*> > myMap; // in c++.
我可以知道,以刪除在此地圖中的條目,它是足以通過調用myMap.erase(entryToBeDeleted) ?或者我應該去遍歷子映射先刪除所有東西,然後刪除條目?
要添加上,內地圖與INT作爲鍵和值
這取決於實際類型嵌套映射,如果它包含原始指針,這是你負有責任迭代雖然嵌套地圖的每個項目解除分配內存。否則,myMap.erase(entryToBeDeleted)
就足夠了。
編輯:
當你的嵌套的地圖有指針的列表,你需要去通過每個列表中的每個嵌套地圖內刪除指針。
一個更好的辦法是使用智能指針:當你刪除嵌套地圖
std::map< std::string, std::map<int,std::list<std::unique_ptr<pointers> > > myMap;
,指針會自動釋放。
指針的列表的圖,因爲它意味着用於除去的條目擦除功能應該足夠了。
參考這一點,如果您有任何其他疑惑http://www.cplusplus.com/reference/map/map/erase/
如果您從外部地圖中刪除條目,它將主動從內部地圖中刪除對象。刪除outer[i]
將破壞(即調用析構函數)outer[i].first
和outer[i].second
,這意味着將爲該元素調用內部映射的析構函數。調用內部映射的析構函數將迭代地調用析構函數以查找(密鑰和值)中的所有元素/對象。
你的內地圖包含哪些類型? – us2012
嗨,感謝您的回覆。內部映射是一個int作爲鍵和一個指針列表作爲值的映射 – kevin