• Viernes 3 de Mayo de 2024, 02:25

Autor Tema:  Acceder a objetos atraves de un array  (Leído 1212 veces)

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Acceder a objetos atraves de un array
« en: Lunes 27 de Septiembre de 2010, 00:31 »
0
Quiero hacer un array doble de 200*200, osea que en total va a tener 40000 "espacios".
Voy a presisar una cantidad indefinida de objetos, la cual puede aumentar o disminuir durante el programa, pero supongamos que van a ser alrrededor de 300 objetos.
Cada objeto va a tener una cordenada X y otra cordenada Y, y nececito poder acceder a ese objeto atraves del array. La ubicacion del objeto en el array dependera de sus cordenadas.
Devido a que son solo 300 objetos, habran espacios en el array que no corresponderan a ningun objeto.

LO QUE PRECISO:
Lo que quiero saber es como acceder a un objeto atraves de un array. En otras palabras: organizar los objetos en un array.

RAZON POR LA QUE PRECISO ESO:
Preciso esto para poder aceder a las variables de un objeto conociendo unicamente sus cordenadas.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Acceder a objetos atraves de un array
« Respuesta #1 en: Sábado 2 de Octubre de 2010, 07:27 »
0
¿Puedes ser más específico con tu duda? Un array de objetos que tú hayas creado se declara tal cual como un array de tipos ya definidos como int, char, etc.
Y para acceder a ellos los indicas mediante índices del array:

Código: C
  1.  
  2. int array[ 10 ][ 10 ];
  3. array[ 5 ][ 5 ] = 45;
  4.  
  5. Objeto arrayDeObjetos[ 200 ][ 200 ];
  6. arrayDeObjetos[ 120 ][ 100 ].variable = x;
  7. y = arrayDeObjetos[ 30 ][ 23 ].variable;
  8.  
  9.  
La imaginación es el límite.
Hardware & Software | Mexchip

alb

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Acceder a objetos atraves de un array
« Respuesta #2 en: Sábado 2 de Octubre de 2010, 09:02 »
0
Holà,
Me parece que utilizar una array de 40000 espacios par solo 300 objetos nos es lo mas appropriado.
Porque no proponer un container dedicado que puede utilizar una std::map con la llave siendo une std::pair de las cordenadas. En vez de utilizar el operador [] utilizas el operador() para obtener un elemento.
Algo asi :
Código: C++
  1. #include <map>
  2. #include <utility>
  3.  
  4. template<typename key_t_,typename my_data_t_>
  5. struct my_container
  6. {
  7.     my_data_t_& operator()(key_t_ x_, key_t_ y_)
  8.     {
  9.         return my_set[std::make_pair(x_,y_)];
  10.     }
  11.  
  12.     my_data_t_ const & operator()(key_t_ x_, key_t_ y_) const
  13.     {
  14.         return my_set[std::make_pair(x_,y_)];
  15.     }
  16.  
  17.     private:
  18.     std::map<std::pair<key_t_,key_t_>,my_data_t_> my_set;
  19. };
  20.  
  21. struct dummy {};
  22.  
  23. int main()
  24. {
  25.     my_container<int,dummy> cont;
  26.     cont(1,2) = dummy();
  27.  
  28.    return 0;
  29. }
  30.