Intentaría lo siguiente.
Primera llamada equal_range()
para encontrar el rango de elementos que igualan a la clave.
Si el rango devuelto no está vacío, entonces erase()
un rango de elementos (es decir, el erase()
que toma dos iteradores) donde:
el primer argumento es el iterador del segundo elemento en el rango devuelto (es decir, un pasado .first
devuelto) y
el segundo argumento como el del iterador del par de rango devuelto .second
.
Edite después de leer el comentario de templatetypedef (¡Gracias!):
Si se supone que se elimina un duplicado (a diferencia de todos): si el par devuelto por equal_range()
tiene al menos dos elementos, entonces erase()
el primer elemento pasa el .first del par devuelto a la versión de iterador único de erase()
:
Pseudocódigo:
pair<iterator, iterator> pit = mymultiset.equal_range( key );
if( distance( pit.first, pit.second ) >= 2 ) {
mymultiset.erase( pit.first );
}