Intersección de dos vectores

Iniciado por tokyo13, 29 Junio 2019, 16:53 PM

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

tokyo13

Estoy aprendiendo c++ y no consigo hacer la intersección de dos vectores que ya tengo. Alguien me puede echar una mano?
Ty
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--;
        }
    }

@XSStringManolo

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.


CalgaryCorpus

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.
Aqui mi perfil en LinkedIn, invitame un cafe aqui