Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: tokyo13 en 29 Junio 2019, 16:53 pm



Título: Intersección de dos vectores
Publicado por: tokyo13 en 29 Junio 2019, 16:53 pm
Estoy aprendiendo c++ y no consigo hacer la intersección de dos vectores que ya tengo. Alguien me puede echar una mano?
Ty
Código:
void interseccionNoOrdenado(int vector1[], int medida1, int vector2[], int medida2, int vectorResult[], int& medidaResult)
{
     //inicializamos vectorResult
    for(int i = 0; i <= medida1; i++){
        vectorResult[i] = vector1[i];
    }
    midaResult = medida1;
   
    //ordenamos vector2
   
    int tmp;
    for(int i = 0; i <= (medida2-1); i++){
        for(int j = 0; j <= medida2-i-1; j++){
            if(vector2[j] >= vector2[j+1]){
                tmp = vector2[j];
                vector2[j] = vector2[j+1];
                vector2[j+1] = tmp;
            }
        }
    }
   
    //buscamos valores comunes de vector2 y vectorResultat
    for(int i = 0; i <= medida1; i++){
        if(!buscaElemento(vector2, medida2, vectorResult[i])){ //función devuelve si un num está en un vector
            eliminaElemento(vectorResult, medidaResult, i);//elimina elemento y lo desplaza todo derecha
            medidaResult--;
            i--;
        }
    }


Título: Re: Intersección de dos vectores
Publicado por: @XSStringManolo en 29 Junio 2019, 19:28 pm
Para que vas a usar el programa?
Hay otros formas de recorrer un vector y buscar elementos en él.
int i = 0;
for (auto iter = MiVector.begin(); iter != MiVector.end(); ++iter)
{
i++
   if (*iter == 2)
   {
    cout << "Encontrado el numero 2 en la posición [" <<i-1 << "] del vector." <<endl;
   }
}

for (auto& numero : MiVector)
{
 if (numero == 2)
 {
 cout.... numero;
 }
}

for (MiVector::iterator encontrado = find(miVector.begin(), miVector.end(), 2)
if (encontrado != miVector.end())
{
cout...  *encontrado;
}

No teniendo para que tanta complicación de código.
Recorres uno de los vectores y compruebas si los elementos estan el otro.
int i = 0;
for (iter vector1; iter != 10000; ++iter)
{
 if (*iter == vector2)
 {
 //encontrado elemento comun
 }
 
 if (iter == vector1.end())
 {
  iter = vector1.begin();
 }

 if (i==vector2.size())
 {
 iter = 10.000
 }
 
 else
 {
  i++
  }
}

Es un ejemplo pseudocodigo que me acabo de inventar.
Recorres un vector como quieras.
Compruebas si todos sus elementos coinciden con los del indice
  • del otro vector.
Cuando llegues al final del vector lo reinicias para que vuelva a comparar, y le sumas + 1 al indice del otro vector. Repites esto hasta que se compruebe el útlimo elemento del último vector.
El ejemplo es meramente ilustrativo para que te hagas una idea de como hacerlo y lo puedas hacer tú.

Si necesitas saber que elementos coinciden, puedes poner un append a un tercer vector o cuaquier contenedor de la STL que se adecue mejor al tipo de datos a almacenar.
Con un vector harías:
if (*iter == vector2)
{
vectorelementos.append(*iter);
vectorposicion.append(i);
v
}

Despues con un for imprimes todos loa valores.



Título: Re: Intersección de dos vectores
Publicado por: CalgaryCorpus en 30 Junio 2019, 07:17 am
Toma los elementos del primer vector y construye un set.
Toma los elementos del Segundo vector y por cada uno de ellos preguntale al set si lo contiene. Si es asi, es parte de la interseccion, sino lo ignoras.