es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminación de duplicados de dos vectores utilizando solo iteradores

¿Cómo puedo eliminar duplicados de dos vectores de cadenas (eliminarlos de ambos vectores) utilizando solo iteradores?

Supongo que no funciona porque si los valores ya están eliminados, no se pueden comparar, pero no puedo pensar en ninguna otra solución, solo si tuviera una función para eliminar ambos elementos al mismo tiempo.

c++
void obrisiIsteRijeci(std::vector<std::string>& v1, std::vector<std::string>& v2){
for(auto it = v1.begin(); it != v1.end(); it++){
auto it1 = it;
for(auto it2 = v2.begin(); it2 != v2.end(); it2++){
if((*(it2) == *(it1)) && (*(it1) == *(it2))){
v1.erase(it1);
v2.erase(it2);
}
}
}
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es utilizar bucles for anidados con iteradores para comparar cada elemento de ambos vectores y eliminar los duplicados de ambos vectores. El código de la función obrisiIsteRijeci se proporciona arriba, donde v1 y v2 son los dos vectores de cadenas. El bucle for externo itera sobre los elementos de v1, y el bucle for interno itera sobre los elementos de v2. Para cada par de elementos comparados, si son iguales, la función los elimina de ambos vectores utilizando la función erase y actualiza los iteradores en consecuencia. Sin embargo, esta solución tiene una complejidad temporal cuadrática y puede no ser eficiente para vectores grandes. Una solución más eficiente podría implicar el uso del algoritmo std::set_intersection para encontrar los elementos comunes entre los dos vectores y luego eliminarlos de ambos vectores utilizando la función erase con los iteradores obtenidos del algoritmo de intersección.

Comments are closed.