关于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快),远没有直接下标读取的速度快..
各位大侠看呢??
【我的需求】
找到一种数据存储类型,用来存储游戏中成千上万的纹理,并且该数据类型能够保证:
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不好用吗?
hash_map、hash_set不好用吗?
速度极慢,我需要近乎下标的访问速度。
作者: weiwuyuan 发布时间: 2011-10-08
哈希表的事件效率本来就是近乎下标访问的。怀疑你测试速度用的debug版。
作者: matrixcl 发布时间: 2011-10-08
引用 3 楼 matrixcl 的回复:
哈希表的事件效率本来就是近乎下标访问的。怀疑你测试速度用的debug版。
哈希表的事件效率本来就是近乎下标访问的。怀疑你测试速度用的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库用的方法对付通用数据比这个高效的多。
【有一个Slots变量,比如设置成20,就是取key的0~19余数,然后对这个0~19进行分类,有相同的,就用链表一直next下去.
这种么?】
这只是hash表的一种实现方法。我先行stl库用的方法对付通用数据比这个高效的多。
作者: matrixcl 发布时间: 2011-10-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28