Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: RayHack en 22 Diciembre 2013, 00:32 am



Título: [Duda] 2 iteraciones al mismo tiempo
Publicado por: RayHack en 22 Diciembre 2013, 00:32 am
Buenas amigos quisiera pedirles un poco de ayuda en una duda que tengo.

¿Como hago 2 iteraciones una de map y otra de un vector en un mismo bucle?

Código:
for(std::map<int, Struct*>::iterator Structid = Mapa.begin(); Structid != Mapa.end(); ++Structid)
{
for(std::vector<int>::iterator vectorid = Vector.begin(); vectorid != Vector.end(); ++vectorid)
{
}
}

PD: Necesito pasar las iteraciones del vector por cada elemento del map, osea ejecutar los 2 bucles al mismo tiempo.

Un saludo y muchas gracias por su ayuda.




Título: Re: [Duda] 2 iteraciones al mismo tiempo
Publicado por: amchacon en 22 Diciembre 2013, 11:30 am
Pues:
Código
  1. std::map<int, Struct*>::iterator Structid = Mapa.begin();
  2.  
  3. for(std::vector<int>::iterator vectorid = Vector.begin(); vectorid != Vector.end() && Structid != Mapa.end(); ++vectorid)
  4. {
  5.   //...
  6.  
  7.  Structid++;
  8. }
  9.  


Título: Re: [Duda] 2 iteraciones al mismo tiempo
Publicado por: 0xDani en 22 Diciembre 2013, 14:30 pm
Y así? Ahora mismo no estoy seguro de que compile, pero podría funcionar:

Código
  1.  
  2. for(std::vector<int>::iterator vectorid = Vector.begin(), std::map<int, Struct*>::iterator Structid = Mapa.begin(); vectorid != Vector.end() && Structid != Mapa.end(); ++vectorid, ++Structid)
  3. {
  4.  //...
  5. }
  6.  

PD: Si puedes usar características de C++ 11 usa la keyword auto para que no te salga tan largo e ilegible el cuerpo del bucle.


Título: Re: [Duda] 2 iteraciones al mismo tiempo
Publicado por: RayHack en 22 Diciembre 2013, 22:50 pm
Muchas gracias a los dos por sus respuestas, me ocurre el mismo problema el primer bucle vector imprime solo 1 dato y el mapa igual pero con el primer numero del dato del vector, es algo muy raro lo que me está pasando.

Lo que quiero hacer es por ejemplo:

MAPA VALOR = {1, 2, 3, 4, 5};
VECTOR VALORES = {0, 1, 2, 3, 4, 5};

Quiero que cada valor del mapa pase en este caso 5 veces por el valor del mapa y que luego que pasen las 5 iteraciones por el primer valor del mapa pase al segundo valor y haga lo mismo.

PD: Con mi forma de 2 bucle for funciona pero el vector solo iteraciona el mayor valor osea que los menores no se pasan, o sea que si el primer y unico valor es 1 y luego se inserta otro valor mayor entonces solo pasa el valor mayor.

Un saludo y muchas gracias.