2011-07-04 26 views
6

Estoy trabajando en un juego móvil para varias plataformas (Android, iOS, y tal vez incluso algún tipo de consola en el futuro).google :: dense_hash_map vs std :: tr1 :: unordered_map?

Estoy tratando de decidir si utilizar tr1::unordered_map o google::dense_hash_map para recuperar las texturas de un Administrador de recursos (para un enlace posterior usando OpenGL). Por lo general, esto puede ocurrir unas cuantas veces por segundo (N por cuadro, donde mi juego se está ejecutando en ~ 60 fps)

consideraciones son:

  • Rendimiento (la memoria y la CPU en cuanto a)
  • Portabilidad

Cualquier idea o sugerencia es bienvenida.

+0

me interesa ¿por qué debe usar un mapa hash en absoluto? No sé nada sobre la plataforma que estás usando, pero suena raro para el propósito que describes. – Rookie

+0

Este camino a seguir para la gestión de texturas no es infrecuente, Ogre3D utiliza un enfoque similar (http://www.ogre3d.org/docs/api/html/classOgre_1_1TextureManager.html) – Goles

+2

Es imposible dar una buena respuesta a esto pregunta. Tal vez no hará ninguna diferencia discernible en absoluto. ¿Por qué no lo mides y ves? –

Respuesta

1

En un proyecto de C++ que he desarrollado, me preguntaba algo similar: ¿cuál era el mejor, tr1:unordered_map, boost::unordered_map o std::map? Terminé declarar una typedef, controlable en su compilación:

#ifdef UnorderedMapBoost 
typedef boost::unordered_map<cell_key, Cell> cell_map; 
#else 
#ifdef UnorderedMapTR1 
typedef std::tr1::unordered_map<cell_key, Cell> cell_map; 
#else 
typedef std::map<cell_key, Cell> cell_map; 
#endif // #ifdef UnorderedMapTR1 
#endif // #ifdef UnorderedMapBoost 

Entonces podría controlar en tiempo de compilación cuál usar, y que perfila. En mi caso, la portabilidad terminó siendo más importante, por lo que normalmente uso std::map.

1

vaya con el STL para contenedores estándar. Tienen un comportamiento predecible y se pueden usar sin problemas en los algos/iteradores de STL. También recibe algunas garantías de rendimiento por parte de STL.

Esto también debería garantizar la portabilidad. La mayoría de los compiladores tienen implementado el nuevo estándar.

Cuestiones relacionadas