侯捷C++ STL:哈希表(unordered_set,unordered_multiset,unordered_map,unordered_multimap)的底层实现

哈希表的产生由于内存不够一一映射。于是乎在空间不足时取余数。
在这里插入图片描述
为了防止某一个链表过长,这里根据经验来制定规则。当插入的元素个数等于buckets时这时哈希表要扩容。扩容因子是两倍。但是buckets值尽量是质数,选择质数是为了尽量做到均匀散列。所以扩容后要找两倍大后附近的质数。编译器将空间扩容的空间大小都自己定义好了,不用重新计算空间,53-97-193…。
在这里插入图片描述
底层实现:
HashFcn:一个对象如何映射为一个号码/编号。hasher,key_equal,ExtractKey是function object大小理论是0,实际都是1个字节。vector内含三个指针,所以大小是12字节。_hashtable_iterator很像deque的迭代器,当走到边缘有能力回到控制中心,跳到下一个缓冲区(篮子)。这个迭代器里cur指向现在的元素,ht指向哈希表(一堆菜篮子),让其有能力指向像一个菜篮子。
在这里插入图片描述
hashtable的一个栗子:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值