Eliminar Elementos repetidos en un array

Iniciado por maikelowen, 7 Enero 2015, 19:27 PM

0 Miembros y 1 Visitante están viendo este tema.

maikelowen

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 ;)

Orubatosu

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
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

MCKSys Argentina

Usando vectores:

Código (C++) [Seleccionar]
#include <algorithm>

template <typename T>
void quitar_duplicados (std::vector<T>& vec)
{
  std::sort(vec.begin(), vec.end());
  vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
}


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

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


_Enko

#3
Hola, esto tendría algo de ilegal?

Código (cpp) [Seleccionar]

vector<string> rem_dup(vector<string> list)
{
   //hacer algo para quitar entradas duplicadas
   return  list;
}


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.

Orubatosu

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)
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

_Enko

Disculpas, escribí el codigo asi nomas xD
vector<string> rem_dup(vector<string> lista_palabras)
{
    //hacer algo para quitar entradas duplicadas
    return  lista_palabras;
}

Orubatosu

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
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998