2013-01-23 52 views
0

條目我有一張地圖,宣佈爲要刪除嵌套地圖在C++

std::map< std::string, std::map<int,std::list<pointers*> > myMap; // in c++. 

我可以知道,以刪除在此地圖中的條目,它是足以通過調用myMap.erase(entryToBeDeleted) ?或者我應該去遍歷子映射先刪除所有東西,然後刪除條目?

要添加上,內地圖與INT作爲鍵和值

+1

你的內地圖包含哪些類型? – us2012

+0

嗨,感謝您的回覆。內部映射是一個int作爲鍵和一個指針列表作爲值的映射 – kevin

回答

0

這取決於實際類型嵌套映射,如果它包含原始指針,這是你負有責任迭代雖然嵌套地圖的每個項目解除分配內存。否則,myMap.erase(entryToBeDeleted)就足夠了。

編輯:

當你的嵌套的地圖有指針的列表,你需要去通過每個列表中的每個嵌套地圖內刪除指針。

一個更好的辦法是使用智能指針:當你刪除嵌套地圖

std::map< std::string, std::map<int,std::list<std::unique_ptr<pointers> > > myMap; 

,指針會自動釋放。

+0

這不是他想要做的。他想從* outer *地圖中刪除一個元素,並且不確定他是否需要清理與其關聯的內部地圖... – us2012

+0

@billz嗨,非常感謝您的回覆! – kevin

0

如果您從外部地圖中刪除條目,它將主動從內部地圖中刪除對象。刪除outer[i]將破壞(即調用析構函數)outer[i].firstouter[i].second,這意味着將爲該元素調用內部映射的析構函數。調用內部映射的析構函數將迭代地調用析構函數以查找(密鑰和值)中的所有元素/對象。