У меня есть карта, элементы которой являются векторами. Я должен удалить из этих векторов все элементы, которые равны специальному числу num
std::map<size_t,std::vector<size_t> > myMap;
for (std::map<size_t,std::vector<size_t> >::iterator itMap = myMap.begin();itMap != myMap.end();++itMap )
{
for (std::vector<size_t>::iterator itVec = itMap->second.begin();itVec != itMap->second.end();)
{
auto itNextVec = itVec;
++itNextVec;
if (*itVec == num)
{
itMap->second.erase(itVec );
}
itVec = itNextVec;
}
}
Код вызывает exepsion во время выполнения. В VS - vector iterators incompatible
. Может ли кто-нибудь указать, в чем причина этого?
Спасибо
std::remove
, верно? Это было бы не только красивее, но и эффективнее.auto& v = itMap->second; v.erase(std::remove(v.begin(), v.end(), num), v.end());
- person Benjamin Lindley   schedule 23.02.2013