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

To Delete an Entry in a Nested Map in c++

本文关键字:映射 嵌套 C++ 删除      更新时间:2023-10-16

我有一个地图声明为

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

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

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

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

编辑:

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

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

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

删除嵌套地图时,指针将自动解除分配。

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

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

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