我正在为多个平台(Android、iOS,以及未来可能还会有某些游戏机)开发一款移动游戏。我正在考虑使用 tr1::unordered_map 或者 google::dense_hash_map 来从资源管理器中检索纹理(以便稍后使用OpenGL进行绑定)。通常情况下,这可能每秒发生很多次(每帧N次,我的游戏运行在大约60 fps)。
需要考虑以下因素:
需要考虑以下因素:
- 性能(内存和CPU方面)
- 可移植性
使用STL标准容器。它们具有可预测的行为,并且可以在STL算法/迭代器中无缝使用。此外,STL还提供了一些性能保证。
这也应该保证可移植性。大多数编译器都已经实现了新的标准。
tr1:unordered_map
、boost::unordered_map
还是 std::map
?最终我决定在编译时声明一个可控的 typedef
:#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
我可以在编译时控制使用哪一个,并对其进行分析。在我的情况下,可移植性最终变得更加重要,因此我通常使用std::map
。