elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Uso de la estructura Pair en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Uso de la estructura Pair en C++  (Leído 2,338 veces)
KINGARZA

Desconectado Desconectado

Mensajes: 33

Facebook: Luis Garza


Ver Perfil
Uso de la estructura Pair en C++
« en: 26 Julio 2017, 09:44 am »

Hola a todos!
Quiero hacer una cola que guarde cinco valores y para ello estoy usando la estructura PAIR de c++, el problema esta en como acceder a estos elementos.

El codigo de abajo muestra como defino el estado y la cola de este tipo
Código
  1. #define Estado pair<int, pair<int, pair<int, pair<int, int> > > >
  2. set<Estado>Cola;

Por ejemplo, se que para acceder al primer elemento es:
Código
  1. int a = (*Cola.begin()).first;

Para el segundo elemento es:
Código
  1. int a = (*Cola.begin()).second.first;

Podrias ayudarme por favor?


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Uso de la estructura Pair en C++
« Respuesta #1 en: 26 Julio 2017, 11:25 am »

Lo primero, un set es una "lista" ordenada. ¿Cómo ordenas ese pair? Por este motivo, set no es lo que buscas. Si quieres una cola, puedes usar queue, o algo más genérico como vector o list.

Ahora, si lo quieres hacer con pairs, pues bien, así es como accedes a los elementos. Pero pair no está para eso. Es preferible que utilices un array o una estructura o clase para guardar esos 5 valores.


En línea

KINGARZA

Desconectado Desconectado

Mensajes: 33

Facebook: Luis Garza


Ver Perfil
Re: Uso de la estructura Pair en C++
« Respuesta #2 en: 26 Julio 2017, 19:08 pm »

Gracias por responder :laugh:, uso la estructura set, para evitar implementar una cola de prioridad con MIN. y pues como bien comentas los ordena de menor a mayor, ademas existe la priority_queue de la stl, pero este set me va mejor en rendimiento.
 
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Uso de la estructura Pair en C++
« Respuesta #3 en: 26 Julio 2017, 19:21 pm »

El caso es que en un set no se permiten elementos repetidos, que en el caso de una cola no es algo imposible. En fin, depende de lo que quieras hacer.
En cualquier caso, ¿cuál es la pregunta de este tema? ¿Cuál es el problema?
En línea

KINGARZA

Desconectado Desconectado

Mensajes: 33

Facebook: Luis Garza


Ver Perfil
Re: Uso de la estructura Pair en C++
« Respuesta #4 en: 26 Julio 2017, 19:30 pm »

Mira lo que pasa es que estoy intentado resolver un problema tipo laberinto, en el cual quiero conocer en cada estado:
*la distancia recorrida,
*mi posición
*la posición del otro objeto
y como sabrás en este tipo de problema piden el camino mas corto, entonces lo que hago es poner así la estructura:
d, x, y, x2, y2
donde d =  distancia recorrida hasta ese momento, y como el set ordena de menor a mayor cumple la función que deseo.
Y en cuanto eso de que no permiten repeticiones no importa, pues tengo una matriz de casillas visitadas.

Mi pregunta inicial era como acceder a todos los elementos cuando uso 4 Pairs anidados?
(En base a este codigo que habia mostrado
Código
  1. #define Estado pair<int, pair<int, pair<int, pair<int, int> > > >
  2. set<Estado>Cola;
)
Por cierto, buen Blog!! :-*
« Última modificación: 26 Julio 2017, 19:39 pm por KINGARZA » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Uso de la estructura Pair en C++
« Respuesta #5 en: 27 Julio 2017, 00:38 am »

Pues tal y como lo pusiste al principio:
Por ejemplo, se que para acceder al primer elemento es:
Código
  1. int a = (*Cola.begin()).first;

Para el segundo elemento es:
Código
  1. int a = (*Cola.begin()).second.first;

Y etc. Es un pair dentro de un pair dentro de un pair (...).

Teniendo:
Código
  1. pair<int, pair<int, pair<int, pair<int, int> > > > &var = (*Cola.begin());

Sabemos que:
Código
  1. var.first == int
  2. var.second == pair<int, pair<int, pair<int, int> > >
  3. var.second.first == int
  4. var.second.second == pair<int, pair<int, int> >
  5. var.second.second.first == int
Y etc. Simplemente fíjate en qué es cada miembro. El primer second retorna un XXXXX. El segundo retorna un YYYYY.

Y acerca del tema de guardar los pair así, como verás, no es agradable. Has dicho que es una estructura de la forma: "d, x, y, x2, y2". Puedes hacer eso, una estructura o clase:
Código
  1. struct Estado{
  2.    int d, x, y, x2, y2;
  3. };

Así, en vez de var.second.second.first, usarías, por ejemplo, "var.y".
Ahora el problema es ordenarlo en el set. Para ello, el set requiere que el objeto tenga un operador "<". Así que hagámoslo:

Código
  1. struct Estado{
  2.    int d, x, y, x2, y2;
  3.  
  4.    bool operator<(const Estado& estado){
  5.        return d < estado.d;
  6.    }
  7. };

En fin, tanto pair como tuple son clases que se debería evitar utilizar salvo que sean realmente necesarias. Es mejor crear una clase con nombre y con campos cuyos nombres sean auto-explicativos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch Game] The Pair Game - by SmartGenius
Scripting
SmartGenius 5 5,969 Último mensaje 10 Agosto 2010, 23:36 pm
por DA KILLER
Estructura del get
Desarrollo Web
huerto123 0 3,051 Último mensaje 25 Septiembre 2016, 13:13 pm
por huerto123
Alguien para pair programming en python3?
Scripting
JVBS 0 1,654 Último mensaje 22 Marzo 2019, 06:16 am
por JVBS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines