我有一张声明为
的地图std::map< std::string, std::map<int,std::list<pointers*> > myMap; // in c++.
我是否知道为了删除此地图中的条目,通过调用myMap.erase(entryToBeDeleted)是否足够?或者我应该首先遍历子地图以删除所有内容然后删除条目?
要添加,内部地图是一个地图,其中int为键,指针列为值
答案 0 :(得分:0)
擦除功能应该足以用于删除条目。
,请参考此内容答案 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].first
和outer[i].second
,这意味着将为该元素调用内部地图的析构函数。调用内部映射的析构函数将迭代地调用析构函数中的所有元素/对象(键和值)。