STL Multimap Удалить / Стереть значения - PullRequest
17 голосов
/ 22 января 2010

У меня есть STL Multimap, я хочу удалить записи с карты, которая имеет определенное значение, я не хочу удалять весь ключ, так как этот ключ может отображаться на другие значения, которые требуются.

любая помощь, пожалуйста.

Ответы [ 2 ]

16 голосов
/ 22 января 2010

Если я правильно понимаю, эти значения могут появиться под любой клавишей.Если это так, вам придется перебирать мультикарту и удалять конкретные значения.

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);
}
1 голос
/ 18 августа 2017

Начиная с C ++ 11, std :: multimap :: erase возвращает итератор, следующий за последним удаленным элементом.

Таким образом, вы можете переписать ответ Николаа чуть более аккуратно, не вводя локальную переменную 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;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...