hash_map 桶扩张逻辑
来源:互联网 发布:水电改造设计软件 编辑:程序博客网 时间:2024/04/28 01:15
新增时
if( newTotalsize > curBucketNum){ 找到能容纳newTotalsize 的最近的桶个数__n if(__n > curBucketNum) { 则重新分配桶。 并复制旧桶中所有元素。 }}即,假设当前桶个数为53. 当前总元素是96个。 要插入一个时变为97, 进入第一个if。97个总元素时, 最近的桶个数__n也是97ul > curBucketNum, 进入第二个if;将当前桶数从53扩张到97. 类似, 当总元素达到193时继续扩展到桶数为193.元素的所在桶的下标计算方式是 hash(key)%curBucketNum。 stl中的hash_map只能加一把锁、 加多把锁会出现错误【在同时插入可能引起扩张时。】。自实现的hash_map可以考虑多把锁。 static const unsigned long __stl_prime_list[_S_num_primes] = { 53ul, 97ul, 193ul, 389ul, 769ul, 1543ul, 3079ul, 6151ul, 12289ul, 24593ul, 49157ul, 98317ul, 196613ul, 393241ul, 786433ul, 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul, 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul, 1610612741ul, 3221225473ul, 4294967291ul }; inline unsigned long __stl_next_prime(unsigned long __n)//找到小于且最接近__n的质数。 { const unsigned long* __first = __stl_prime_list; const unsigned long* __last = __stl_prime_list + (int)_S_num_primes; const unsigned long* pos = std::lower_bound(__first, __last, __n); return pos == __last ? *(__last - 1) : *pos; }
0 0
- hash_map 桶扩张逻辑
- Linux逻辑卷的缩减及扩张实例
- hash_map
- hash_map
- hash_map
- hash_map
- hash_map
- hash_map
- hash_map
- HASH_MAP
- hash_map
- hash_map
- hash_map
- hash_map
- hash_map
- hash_map
- hash_map
- hash_map
- js内存泄露的几种情况
- ROWNUM
- leetcode题目:Candy
- centos操作系统mysql utf8设置
- C语言中的EOF是什么?
- hash_map 桶扩张逻辑
- 蔚蓝色色天空
- 开发指南专题一: JEECG微云快速开发平台前言
- JS判断访问设备是移动设备还是pc
- 我把一个o项目里的应用复制到另外一个项目于 访问 就提示“不允许你浏览这个页面。”
- 大并发服务器不得不说的技术--tcp cork
- Android Camera预览过程数据流浅析
- Linux less命令和Linux head命令
- Java追加文件