hashtable的原理

hashtable作为unordered_set和unordered_map的底层数据结构,是隐藏起来的,正常不会直接用到它,但要理解好unordered_set和unordered_map,需要先理解好hashtable

 

hashtable的底层数据结构是vector,vector中的元素是链表

vector代表篮子,初始化大小为53(GNU的做法),存的是结点指针

元素放进来的时候,会经过一个hash函数,找到对应的篮子,然后连在篮子的后面

hashtable的原理_第1张图片

当放进去的元素的数量超过vector的长度的时候,就会执行rehashing:

vector的大小会先变大为2倍,但不一定是2倍,会变成2倍左右的一个素数

vector变大后,原先的每一个元素都需要重新用hash函数计算并放到对应的篮子里

hashtable的原理_第2张图片

如果还需要rehashing的话,vector的大小会按照以下增长,这些数字是已经先算好的,vector在扩充的时候,不会再花时间去计算,而是直接在下面抓取对应的大小

hashtable的原理_第3张图片

hashtable数据结构源码

hashtable的原理_第4张图片

整理自:https://www.bilibili.com/video/av25432066?t=270&p=23(感谢候老师)

你可能感兴趣的:(《STL源码剖析》)