c++ 在循环中删除迭代器(映射的映射)

c++ Remove iterator in loop (map of maps)

本文关键字:映射 迭代器 删除 循环 c++      更新时间:2023-10-16

我有一个地图图,在迭代过程中我需要删除迭代器,如以下代码所示。最好的方法是什么?

for (Map1_t::iterator itOutMap = map1.begin(); itOutMap != map1.end(); ++ itOutMap)
{
for (Map2_t::iterator itInMap = itOutMap->second.begin(); itInMap != itOutMap->second.end(); ++itInMap)
{
if (itInMap->first ==  USER_REQ_TYPE)
{
// need to delete the current itInMap
}
}
}

您可以使用std::map::erase()http://en.cppreference.com/w/cpp/container/map/erase 该页面中的示例完全符合您的要求

for (Map1_t::iterator itOutMap = map1.begin(); itOutMap != map1.end(); ++ itOutMap)
{
for (Map2_t::iterator itInMap = itOutMap->second.begin(); itInMap != itOutMap->second.end(); )
{
if (itInMap->first ==  USER_REQ_TYPE)
{
itInMap=itOutMap->second.erase(itInMap);
}
else ++itInMap;
}
}