【STL】hashtable unordered(未完成)

hashtable源码实现

G2.9版本的hashtable源码

在这里插入图片描述

  • hashtable的buckets_vector的大小通常为质数,如果元素个数大于buckets_vector的大小时,需要采用rehashing,即需要扩充buckets_vector的大小,扩充为当前大小两倍附近的一个质数
  • 5个需要注意的模板参数:Key,Value,HashFcn,ExtractKey,EqualKey
    Key就是Key,节点的大小关系是按Key排的;Value是整个node,而不是key对应的data;HashFcn代表如何在已知Key的前提下得到该节点在buckets_vector中的位置,ExtractKey代表如何从Value中提取出Key,也就是一个可调用对象的类型,传入一个Value,返回对应的Key;EqualKey提供两个Key比较的依据
  • hashtable可以实现遍历和iterator操作,即遍历bucket_vector所有链表的所包含元素
  • hashtable节点的key值不可以改变,因为随意改变会破坏哈希表结构
  • hashtable初始长度为20字节,因为hashtable的成员hash,equals,get_key为没有元素的函数,大小应为0,但是实际上编译器分别将它们视其为1字节,buckets是一个vector类型,大小为12字节,size_type大小为4字节,另外编译器默认是按照4字节对齐的,所以总共为20(19+1)字节

HashFcn通常传入hash

在这里插入图片描述
在这里插入图片描述
利用hash计算出对应的hash code,再由以下的modulus操作计算出元素可以映射到hashtabe内的哪个位置上
在这里插入图片描述

unordered容器

在这里插入图片描述

25.15

猜你喜欢

转载自blog.csdn.net/weixin_45005811/article/details/113525052