迭代时std :: multimap :: erase()

皮特

我有一个std::multimap将会话ID映射int到该会话中使用的硬件的硬件(该硬件由struct,其中包含一些特定于硬件的信息来描述)。

我有一个清理功能,必须对每个硬件进行特定的清理工作。清理完成后,我需要从映射中删除该元素,因为该会话中不再使用硬件。

请注意,我不仅要从会话中删除单个硬件。相反,整个会话被拆除,因此我想在映射中搜索会话ID,清理硬件,并从映射中删除所有这些条目。

这是一些代码,显示了我要解释的内容:

void MyClass::end_session(const int session_id) {
  // session_map_ is a member variable of MyClass
  const auto range = session_map_.equal_range(session_id);
  for (auto it = range.first; it != range.second; session_map_.erase(it++)) {
    // do cleanup for the hardware pointed to by it->second
  }
}

循环合法吗?我知道传递给的迭代器erase()将失效,但这不会无效range.firstrange.second正确吗?另外,是否session_map_.erase(it++)能像我期望的那样工作?也就是说,我假设it将其保存为的参数erase(),并递增到其新值,然后erase()为旧值调用(因此在递增之前使迭代器无效)。那是对的吗?

帕万·昌达(Pavan Chandaka)

该文件说

其他引用和迭代器不受影响

因此,您的循环将按预期运行并按预期运行erase

假设您有4个元素,在这种情况下,循环运行4次没有任何问题。

https://en.cppreference.com/w/cpp/container/multimap/erase

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章