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

(См. также ответ на этот вопрос)