Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: maikelowen en 7 Enero 2015, 19:27 pm



Título: Eliminar Elementos repetidos en un array
Publicado por: maikelowen en 7 Enero 2015, 19:27 pm
Se me plantea la siguiente duda. Como mediante una función a la que le paso un array de tipo string con una serie de nombre, me devuelva otro array pero con los nombres sin repetir. La función no quiero que sea de tipo void.



Un saludo y gracias ;)


Título: Re: Eliminar Elementos repetidos en un array
Publicado por: Orubatosu en 7 Enero 2015, 20:40 pm
Que yo sepa, C++ no te permite devolver en una función un array entero, pero te permite por ejemplo devolver un vector, o una lista, lo cual te viene a servir igual.

Lo que puede devolver es un puntero a un array

Pero lo mismo me equivoco


Título: Re: Eliminar Elementos repetidos en un array
Publicado por: MCKSys Argentina en 7 Enero 2015, 20:45 pm
Usando vectores:

Código
  1. #include <algorithm>
  2.  
  3. template <typename T>
  4. void quitar_duplicados (std::vector<T>& vec)
  5. {
  6.  std::sort(vec.begin(), vec.end());
  7.  vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
  8. }
  9.  

La función retorna void, pero el vector que le pasas queda modificado.

Saludos!


Título: Re: Eliminar Elementos repetidos en un array
Publicado por: _Enko en 7 Enero 2015, 21:06 pm
Hola, esto tendría algo de ilegal?

Código
  1. vector<string> rem_dup(vector<string> list)
  2. {
  3.    //hacer algo para quitar entradas duplicadas
  4.    return  list;
  5. }
  6.  

La unica desventaja que veo con pasando por referencia es que se va a crear una nueva copia de la lista. Si la original no es necesario mantenerla, tendría mas sentido el pasaje por referencia.
Saludos.


Título: Re: Eliminar Elementos repetidos en un array
Publicado por: Orubatosu en 7 Enero 2015, 21:30 pm
list es una palabra reservada, es un contenedor de la STL.

Si lo que quieres es eliminar duplicados, lo mas rápido es un map (otro contenedor de la STL)


Título: Re: Eliminar Elementos repetidos en un array
Publicado por: _Enko en 7 Enero 2015, 21:33 pm
Disculpas, escribí el codigo asi nomas xD
Código:
vector<string> rem_dup(vector<string> lista_palabras)
{
    //hacer algo para quitar entradas duplicadas
    return  lista_palabras;
}


Título: Re: Eliminar Elementos repetidos en un array
Publicado por: Orubatosu en 8 Enero 2015, 10:21 am
Perfectamente... claro que puedes.

Con todo, si lo que quieres es eliminar repetidos, echa un vistazo a map

http://www.cplusplus.com/reference/map/map/

Para búsquedas rápidas y para eliminar duplicados es tremendamente eficiente, de hecho ni siquiera tienes que "comprobar duplicados", simplemente vas metiendo datos, y los duplicados se eliminan solos