una repetidos para numeros lista funcion eliminar elementos caracteres buscar arreglo algoritmo c++ stl multiset

c++ - repetidos - En std:: multiset hay una función o algoritmo para borrar solo una muestra(unica o duplicada) si se encuentra un elemento



funcion para eliminar caracteres en c (5)

Quizás esto es un duplicado pero no encontré nada buscando: cuando se llama a erase(value) en std::multiset todos los elementos con el valor encontrado se borran. La única solución que se me ocurre es:

std::multiset<int>::iterator hit(mySet.find(5)); if (hit!= mySet.end()) mySet.erase(hit);

Esto está bien, pero pensé que podría haber algo mejor. Algunas ideas ?


De hecho, la respuesta correcta es:

my_multiset.erase (my_multiset.find (value));


Intentaría lo siguiente.

Primero llame a equal_range() para encontrar el rango de elementos que equivale a la clave.

Si el rango devuelto no está vacío, erase() un rango de elementos (es decir, el erase() que toma dos iteradores) donde:

  • el primer argumento es el iterador al segundo elemento en el rango devuelto (es decir, un pasado. .first devuelto) y

  • el segundo argumento como el iterador del par de rango devuelto .second .

Edite después de leer el comentario de templatetypedef (¡Gracias!):

Si se supone que se debe eliminar un duplicado (a diferencia de todos): si el par devuelto por equal_range() tiene al menos dos elementos, entonces erase() el primer elemento pasando el primero del par devuelto a la versión del iterador único del erase() :

Pseudo-código:

pair<iterator, iterator> pit = mymultiset.equal_range( key ); if( distance( pit.first, pit.second ) >= 2 ) { mymultiset.erase( pit.first ); }


if(my_multiset.find(key)!=my_multiset.end()) my_multiset.erase(my_multiset.equal_range(key).first);

Esta es la mejor manera en que puedo pensar para eliminar una sola instancia en un multiset en c ++


auto itr = my_multiset.find(value) if(itr!=my_multiset.end()){ my_multiset.erase(itr); }

Me imagino que hay una forma más limpia de lograr lo mismo. Pero esto hace el trabajo.


multiset < int > :: iterator it , it1 ; it = myset.find ( value ) ; it1 = it ; it1 ++ ; myset.erase ( it , it1 ) ;