在 C++ 中删除嵌套映射中的条目
To Delete an Entry in a Nested Map in c++
我有一个地图声明为
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].first
和outer[i].second
,这意味着将为该元素调用内部映射的析构函数。调用内部映射的析构函数将以迭代方式调用其中所有元素/对象(键和值)的析构函数。
相关文章:
- 在C++中搜索嵌套多映射值
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果我将嵌套映射作为多重映射的值,如何将值插入内部映射?
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- 如何在嵌套映射(C++)中高效地查找密钥
- c++ 嵌套结构映射找不到成员
- 在结构的嵌套映射上链接运算符 []
- 访问range_expression中的嵌套元素会返回不完整的映射(段错误)
- 如何同时从嵌套映射中检索键字符串
- YAML-cpp 解析嵌套映射和序列错误
- 嵌套映射迭代器
- 引用映射中嵌套对中的值
- 插入到C++中的嵌套映射中
- 在嵌套的 STL 映射中插入和迭代
- c++中嵌套的无序映射
- 访问嵌套类内的空映射时发生访问冲突
- C++通过引用传递嵌套的无序映射并对其进行操作
- 嵌套的映射括号初始化无法编译
- 如何将数据插入嵌套的多映射/映射中
- c++中嵌套三个映射Vs单独映射的性能