Desarrollo de videojuegos 1: arquitectura del motor de videojuegos (2ª edición)

Page 201

5.4. Contenedores asociativos

[183]

Tanto el map7 como el multimap8 son contenedores asociativos ordenados, por lo que es posible recorrer su contenido en el orden en el que estén almacenados. Sin embargo, este orden no es el orden de inserción inicial, como ocurre con los conjuntos, sino que viene determinado por aplicar una función de comparación. Implementación La implementación típica de este tipo de contenedores es idéntica a la de los conjuntos, es decir, mediante un árbol binario balanceado. Sin embargo, la diferencia reside en que las claves para acceder y ordenar los elementos son objetos distintos a los propios elementos. Rendimiento El rendimiento de estos contenedores es prácticamente idéntico al de los conjuntos, salvo por el hecho de que las comparaciones se realizan a nivel de clave. De este modo, es posible obtener cierta ventaja de manejar claves simples sobre una gran cantidad de elementos complejos, mejorando el rendimiento de la aplicación. Sin embargo, nunca hay que olvidar que si se manejan claves más complejas como cadenas o tipos de datos definidos por el usuario, el rendimiento puede verse afectado negativamente. El operador [] El operador [] se puede utilizar para acceder, escribir o actualizar información sobre algunos contenedores. Sin embargo, es importante considerar el impacto en el rendimiento al utilizar dicho operador, el cual vendrá determinado por el contenedor usado.

Por otra parte, el uso del operador [] no tiene el mismo rendimiento que en vectores, ya que implica realizar la búsqueda del elemento a partir de la clave y, por lo tanto, no sería de un orden de complejidad constante sino logarítmico. Al usar este operador, también hay que tener en cuenta que si se escribe sobre un elemento que no existe, entonces éste se añade al contenedor. Sin embargo, si se intenta leer un elemento que no existe, entonces el resultado es que el elemento por defecto se añade para la clave en concreto y, al mismo tiempo, se devuelve dicho valor. El siguiente listado de código muestra un ejemplo. Como se puede apreciar, el listado de código muestra características propias de STL para manejar los elementos del contenedor: ✄ En la línea ✂7 ✁ se hace uso de pair para declarar una pareja de ✄ valores: i) un iterador al contenedor definido en la línea ✂6 ✁y ii) un valor booleano. Esta estructura se✄utilizará para recoger el valor de retorno de una inserción (línea ✂14 ✁). ✄ Las líneas ✂10-11 ✁muestran inserciones de elementos. ✄ En la línea ✂15 ✁ se recoge el valor de retorno al intentar insertar un elemento con una ✄ clave ya existente. Note cómo se accede al iterador en la línea ✂17 ✁para obtener el valor previamente almacenado en la entrada con clave 2. 7 http://www.cplusplus.com/reference/stl/map/

8 http://www.cplusplus.com/reference/stl/multimap/


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.