Tengo STL Multimap, quiero eliminar entradas del mapa que tiene un valor específico, no quiero eliminar la clave completa, ya que esa clave puede estar mapeando a otros valores que se requieren.STL Multimap Eliminar/Borrar valores
ayuda por favor.
Tengo STL Multimap, quiero eliminar entradas del mapa que tiene un valor específico, no quiero eliminar la clave completa, ya que esa clave puede estar mapeando a otros valores que se requieren.STL Multimap Eliminar/Borrar valores
ayuda por favor.
Si entiendo correctamente estos valores pueden aparecer bajo cualquier tecla. Si ese es el caso, tendrá que iterar sobre su multimapa y borrar valores específicos.
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);
}
Sí, tiene la razón, los valores pueden aparecer debajo de cualquier tecla. – Avinash
Gracias Esto funciona para mí, estaba buscando utilizar los algoritmos remove_if. – Avinash
Me temo que 'remove_if' de'
Desde C++ 11, std::multimap::erase devuelve un iterador siguiente al último elemento eliminado.
Así puede volver a escribir la respuesta de Nikola poco más limpia sin necesidad de introducir la variable erase_iter locales:
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;
}
(Véase también la respuesta a this question)
Una posible solución podría ser la de cambiar las claves y valores , esta podría no ser una opción para todos leyendo esto, pero podría ser para algunos. – dangerousdave