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);
}
}
}
}
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, dondev1
yv2
son los dos vectores de cadenas. El bucle for externo itera sobre los elementos dev1
, y el bucle for interno itera sobre los elementos dev2
. Para cada par de elementos comparados, si son iguales, la función los elimina de ambos vectores utilizando la funciónerase
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 algoritmostd::set_intersection
para encontrar los elementos comunes entre los dos vectores y luego eliminarlos de ambos vectores utilizando la funciónerase
con los iteradores obtenidos del algoritmo de intersección.