hashtable是stl内一个非公开的类:
其是c++11中新加入的unordered container容器的底部实现。
包括: unordered_set, unordered_multiset, unordered_map, unordered_multimap.
为了防止某个单向链表太长,当元素个数等于buckets vector长度时,buckets vector长度扩展为靠近原长度两倍值的素数(buckets vector初始长度为53)
,然后将所有元素打散重新计算位置。每次扩展的长度已经计算好:
hash值的计算:
若key是数字则数字本身就是自己的hash值。
若key是字符串例如 "abcd"则hash值为 ( (‘a’*5+‘b’)*5+‘c’)*5+‘d’ //每个字符对应的ASCII码乘以5加上下一个字符
当key为自定义类型时需要自己写hashfunc计算其hash值
hash在buckets vector中对应的位置:
hash对buckets vector的size取模(余数)。