我有一张地图声明为
std::map< std::string, std::map<int,std::list<pointers*> > myMap; // in c++.
我可以知道为了删除此地图中的条目,调用 myMap.erase(entryToBeDeleted) 是否足够?或者我应该去遍历子地图以先删除所有内容,然后再删除条目?
补充一点,内部映射是一个以 int 为键、指针列表为值的映射
如果您从外部映射中删除条目,它将主动从内部映射中删除对象。删除outer[i]
将销毁(即调用析构函数) for outer[i].first
and outer[i].second
,这意味着将为该元素调用内部映射的析构函数。调用内部映射的析构函数将迭代地调用其中所有元素/对象(键和值)的析构函数。
擦除功能应该足够了,因为它用于删除条目。
如果您有任何疑问,请参考此http://www.cplusplus.com/reference/map/map/erase/
这取决于嵌套映射的真实类型,如果它包含原始指针,则您有责任遍历嵌套映射的每个项目以释放内存。否则,myMap.erase(entryToBeDeleted)
就足够了。
编辑:
由于您的嵌套映射具有指针列表,因此您需要遍历每个嵌套映射内的每个列表以删除指针。
更好的方法是使用智能指针:
std::map< std::string, std::map<int,std::list<std::unique_ptr<pointers> > > myMap;
当您删除嵌套映射时,指针将被自动释放。