【问题标题】:To Delete an Entry in a Nested Map in c++在 C++ 中删除嵌套映射中的条目
【发布时间】:2013-01-23 01:23:52
【问题描述】:

我有一张地图声明为

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

我想知道为了删除这个地图中的一个条目,调用 myMap.erase(entryToBeDeleted) 就足够了吗?还是我应该去遍历子地图以先删除所有内容,然后再删除条目?

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

【问题讨论】:

  • 你的内图包含哪些类型?
  • 您好,感谢您的回复。内部映射是以 int 为键,指针列表为值的映射

标签: c++ map


【解决方案1】:

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

编辑:

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

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

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

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

【讨论】:

  • 这不是他想做的。他想从 outer 映射中删除一个元素,但不确定是否需要清理与其关联的内部映射...
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-27
      • 2021-02-06
      • 2015-06-04
      • 2014-04-12
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多