STM Multimap Удалить/Стереть значения
У меня есть STL Multimap, я хочу удалить записи с карты, которая имеет определенное значение, я не хочу удалять весь ключ, так как этот ключ может отображаться для других требуемых значений.
любая помощь пожалуйста.
Ответы
Ответ 1
Если я правильно понимаю, эти значения могут появляться под любой клавишей. Если это так, вам придется перебирать мультимап и стирать определенные значения.
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// you have to do this because iterators are invalidated
Multimap::iterator erase_iter = iter++;
// removes all even values
if (erase_iter->second % 2 == 0)
data.erase(erase_iter);
}
Ответ 2
Так как С++ 11, std:: multimap:: erase возвращает итератор, следующий за последним удаленным элементом.
Итак, вы можете переписать Nikola немного более чисто, не вводя локальную переменную erase_iter:
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// removes all even values
if (iter->second % 2 == 0)
iter = data.erase(iter);
else
++iter;
}
(См. также ответ на этот вопрос)