У меня есть STL Multimap, я хочу удалить записи с карты, которая имеет определенное значение, я не хочу удалять весь ключ, так как этот ключ может отображаться на другие значения, которые требуются.
любая помощь, пожалуйста.
Если я правильно понимаю, эти значения могут появиться под любой клавишей.Если это так, вам придется перебирать мультикарту и удалять конкретные значения.
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); }
Начиная с 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; }
(см. Также ответ на этот вопрос )