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

 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;
    }

  }

10-08 00:19