在c ++中删除嵌套映射中的条目

时间:2013-01-23 01:23:53

标签: c++ map

我有一张声明为

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

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

要添加,内部地图是一个地图,其中int为键,指针列为值

3 个答案:

答案 0 :(得分:0)

擦除功能应该足以用于删除条目。

如果您有任何疑问http://www.cplusplus.com/reference/map/map/erase/

,请参考此内容

答案 1 :(得分:0)

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

修改

由于嵌套映射包含指针列表,因此需要遍历每个嵌套映射中的每个列表以删除指针。

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

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

删除嵌套映射时,指针将自动解除分配。

答案 2 :(得分:0)

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