+ -
当前位置:首页 → 问答吧 → 关于key/value的算法或数据类型的方案选择..

关于key/value的算法或数据类型的方案选择..

时间:2011-10-08

来源:互联网

ps:我的这个需求,其key始终是整型,value是指针

【我的需求】
找到一种数据存储类型,用来存储游戏中成千上万的纹理,并且该数据类型能够保证:
1:可以方便的删除、遍历元素
2:拥有近乎下标访问的key-value查找速度,这一点非常重要,因为游戏里将会大规模查找纹理,不仅是渲染纹理要查,其他的获取纹理属性等等众多函数都需要查找,再加上有成百上千,乃至上万的纹理存在(我的项目里1个字体就是一个纹理),所以对查找速度要求极为严格。

【我的几种方案】
第1种:我起初写了一个简单的map模板,该map的实现相当简单,就是用vector存储所有元素,然后再用一个list保存未使用的索引位置,key的值等于vector的索引,所以,这样的话,key只能由map类本身提供,而非使用者提供,而且只能是整型.

第2种:使用hash表+list
具体:
也很简单,hash表的key等于使用者指定的key,value为list的结点,而list用于保存所有元素,并以此来方便的进行元素遍历,还能保证元素插入顺序.
这种方法还是要耗点内存.


我觉得,这几种方法好像都不太好,速度都不快(肯定比stl::map快),远没有直接下标读取的速度快.. 

各位大侠看呢??

作者: weiwuyuan   发布时间: 2011-10-08

hash_map、hash_set不好用吗?

作者: matrixcl   发布时间: 2011-10-08

引用 1 楼 matrixcl 的回复:
hash_map、hash_set不好用吗?


速度极慢,我需要近乎下标的访问速度。

作者: weiwuyuan   发布时间: 2011-10-08

哈希表的事件效率本来就是近乎下标访问的。怀疑你测试速度用的debug版。

作者: matrixcl   发布时间: 2011-10-08

引用 3 楼 matrixcl 的回复:
哈希表的事件效率本来就是近乎下标访问的。怀疑你测试速度用的debug版。


你指的是如下这种哈希表么?

有一个Slots变量,比如设置成20,就是取key的0~19余数,然后对这个0~19进行分类,有相同的,就用链表一直next下去.
这种么?

作者: weiwuyuan   发布时间: 2011-10-08

我说的是hash_map、hash_set。

【有一个Slots变量,比如设置成20,就是取key的0~19余数,然后对这个0~19进行分类,有相同的,就用链表一直next下去.
这种么?】

这只是hash表的一种实现方法。我先行stl库用的方法对付通用数据比这个高效的多。

作者: matrixcl   发布时间: 2011-10-08

热门下载

更多