0

我有一张地图声明为

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

我可以知道为了删除此地图中的条目,调用 myMap.erase(entryToBeDeleted) 是否足够?或者我应该去遍历子地图以先删除所有内容,然后再删除条目?

补充一点,内部映射是一个以 int 为键、指针列表为值的映射

4

3 回答 3

0

如果您从外部映射中删除条目,它将主动从内部映射中删除对象。删除outer[i]将销毁(即调用析构函数) for outer[i].firstand outer[i].second,这意味着将为该元素调用内部映射的析构函数。调用内部映射的析构函数将迭代地调用其中所有元素/对象(键和值)的析构函数。

于 2013-01-23T01:41:48.230 回答
0

擦除功能应该足够了,因为它用于删除条目。

如果您有任何疑问,请参考此http://www.cplusplus.com/reference/map/map/erase/

于 2013-01-23T01:30:25.683 回答
0

这取决于嵌套映射的真实类型,如果它包含原始指针,则您有责任遍历嵌套映射的每个项目以释放​​内存。否则,myMap.erase(entryToBeDeleted)就足够了。

编辑:

由于您的嵌套映射具有指针列表,因此您需要遍历每个嵌套映射内的每个列表以删除指针。

更好的方法是使用智能指针:

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

当您删除嵌套映射时,指针将被自动释放。

于 2013-01-23T01:31:39.100 回答