Test Foro de elhacker.net SMF 2.1

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
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.