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 .firstdevuelto) 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 );
}