Cómo eliminar duplicados de un vector en C++

Cómo eliminar duplicados de un vector en C++

En la programación es común trabajar con vectores, los cuales son estructuras de datos que contienen un conjunto de elementos. En ocasiones necesitamos eliminar elementos duplicados para que nuestro código funcione correctamente. En este artículo, aprenderemos cómo eliminar duplicados de un vector en el lenguaje de programación C++ utilizando diferentes enfoques.

📋 Aquí podrás encontrar✍
  1. Método 1: Utilizando std::unique
    1. Implementación
    2. Explicación
  2. Método 2: Utilizando std::set
    1. Implementación
    2. Explicación
  3. Método 3: Utilizando std::map
    1. Implementación
    2. Explicación
  4. Conclusión
  5. Preguntas frecuentes
    1. ¿Puedo utilizar std::unique en otros tipos de datos?
    2. ¿Cómo funciona std::set?
    3. ¿Cómo funciona std::map?
    4. ¿Qué método es más eficiente?

Método 1: Utilizando std::unique

Implementación

Uno de los métodos más sencillos para eliminar duplicados en un vector es utilizar la función std::unique. Esta función recibe dos parámetros: el inicio del vector y el final del vector. La función retorna un iterador al nuevo final del vector, es decir, los elementos duplicados se trasladan al final del vector y se eliminan. Para eliminar los elementos duplicados, debemos utilizar la función erase junto con el iterador retornado por la función unique. A continuación, se muestra un ejemplo de cómo implementar este método:


#include
#include

std::vector v {1, 2, 3, 3, 4, 5, 5, 6};
auto last = std::unique(v.begin(), v.end());
v.erase(last, v.end());

Explicación

En este ejemplo, se crea un vector de enteros llamado v con algunos elementos duplicados. Luego, se utiliza la función std:unique para eliminar los elementos duplicados. La función retorna un iterador last que apunta al nuevo final del vector. Por último, se utiliza la función erase para eliminar los elementos duplicados tras el último elemento único.

Método 2: Utilizando std::set

Implementación

Otro enfoque para eliminar duplicados en un vector es utilizar un conjunto de la clase std::set. Un conjunto es una estructura de datos que almacena elementos únicos en orden ascendente. En este caso, podemos crear un conjunto, copiar los elementos del vector al conjunto y luego copiar los elementos del conjunto al vector eliminando así los duplicados. El siguiente ejemplo muestra cómo implementar este método:


#include
#include

std::vector v {1, 2, 3, 3, 4, 5, 5, 6};
std::set s(v.begin(), v.end());
v.assign(s.begin(), s.end());

Explicación

En este ejemplo, se crea un vector de enteros llamado v con algunos elementos duplicados. Luego, se utiliza la función std::set para almacenar los elementos únicos en un conjunto s. Después, los elementos únicos se copian en el vector original utilizando la función assign.

Método 3: Utilizando std::map

Implementación

Otro enfoque interesante para eliminar duplicados en un vector es utilizando un mapa de la clase std::map. Un mapa es una estructura de datos que almacena pares de valores clave-valor ordenados por la clave en orden ascendente. En este caso, podemos utilizar un mapa para almacenar cada elemento del vector como la clave y su frecuencia como el valor. A continuación, podemos copiar los elementos del mapa al vector original eliminando así los duplicados. El siguiente ejemplo muestra cómo implementar este método:


#include

#include

std::vector v {1, 2, 3, 3, 4, 5, 5, 6};
std::map m;
for (int i : v) {
m[i]++;
}
v.clear();
for (auto const& [key, val] : m) {
v.push_back(key);
}

Explicación

En este ejemplo, se crea un vector de enteros llamado v con algunos elementos duplicados. Luego, se utiliza un mapa de la clase std::map para contar la frecuencia de cada elemento en el vector utilizando un bucle for. Después, se copian los elementos únicos del mapa al vector original utilizando un segundo bucle for.

Conclusión

Eliminar duplicados de un vector es una tarea común en la programación. En este artículo, hemos aprendido diferentes enfoques para eliminar duplicados de un vector en C++. El uso de std::unique es el enfoque más sencillo, pero si se desea mantener el orden original del vector, se pueden utilizar std::set o std::map para lograrlo. Esperamos que esta información sea útil en tus próximos proyectos.

Preguntas frecuentes

¿Puedo utilizar std::unique en otros tipos de datos?

Sí, std::unique funciona con cualquier tipo de datos.

¿Cómo funciona std::set?

std::set es un conjunto que almacena elementos únicos en orden ascendente.

¿Cómo funciona std::map?

std::map es un contenedor asociativo que almacena pares de valores clave-valor ordenados por la clave en orden ascendente.

¿Qué método es más eficiente?

Depende del tamaño del vector y de la cantidad de duplicados. En general, std::unique es el enfoque más eficiente para vectores pequeños y std::map es el enfoque más eficiente para vectores grandes con muchos duplicados.
[nekopost slugs="funcion-fmod-cpp,unirse-a-los-hilos-c,cpp-sprintf,parse-xml-en-cpp,funciones-del-par-cpp,stringnpos-cpp,stol-cpp,modulo-de-cpp,use-la-instruccion-de-interruptor-para-cadenas-cpp"]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir