gold_hash_map design
来源:互联网 发布:java web开发书籍排名 编辑:程序博客网 时间:2024/06/11 15:20
前一段时间写了个 hash_strmap, 效果不错,其中的一些设计思想可以扩展。于是,昨天到今天两天写了一个通用的 hash_map, 起了个名字叫gold_hash_map。
hash_strmap 的介绍文章一,介绍文章二
内存使用
和 hash_strmap 一样,使用连续的内存块,不过更简单,只需要两块内存( hash_strmap 需要 3 块或 4 块 )。
不一样的地方
缓存 hash value
一般情况下,hash value 的计算比较昂贵,所有有效的方式就是将这个计算出来的 hash value 缓存起来,但是,缓存是需要空间的!所以,对于简单的 Key,就不缓存它的 hash value, 比如象 int, long 等等,是否缓存的默然条件就是:没有 trivial destructor 并且尺寸小于指针宽度。删除元素更简单
只需要在被删除的那个元素占的位置,用末尾的那个(有效)元素替换,然后再重新链接,一切就 OK 了。但是,如果希望 id 不变,就把这个空位保留下来,并且用链表(数组下标做指针)链接到空闲链表上,以后插入时优先使用空闲链表,空闲链表为空时,在数组后面 append,相当于 vector::push_back……
gold_hash_map::operator[]
使用有效的方式传递参数(Key),如果参数比较复杂,就用引用传,如果比较简单,就直接拷贝。
性能测试
这个 map 和通用的 hash_map 接口非常相似,所以就直接用 google sparse hash map 的性能测试代码了,具体的测试结果在这里。
- gold_hash_map design
- gold_hash_map abstract++
- hash_strmap & gold_hash_map update
- gold_hash_map bench mark with google sparse hash
- gold_hash_map vs google sparse map by google's time_hash_map.cc
- 缓存与平行数组在 hash_strmap 和 gold_hash_map 中的应用
- design
- design
- design
- Design
- design
- Design?Design!
- #Design#System Design准备
- #Design#File System Design
- Design Pattern
- Poster Design
- web design
- Design pattern
- Ajax JSON
- 如何调用google地图的一个简单示例
- linux 设备模型简析
- U盘安装 debian
- JAVA中的序列化和反序列化
- gold_hash_map design
- extjs model的dirty属性能够查询store中某一个行是否改变过
- 网上搜的bonding和vlan的相关材料
- vim中使用sdcv(stardict CLI版)
- GBin1推荐:一个jQuery的超级魔术布局插件 - Isotope
- PHP 中使用 Smarty 之三:Smarty中的保留变量
- 数据绑定中的不同
- CSS选择器.aa.bb类型在IE6下的Bug
- 最短过桥时间