侯捷C++ stl体系结构与源码剖析:一个万能的hash function

为一个类,构建一个Hash Function。有两个办法,一是设计为成员函数,但是为了调用成为函数对象,需要重载operator();二是设计成普通函数。第二种方法中,<>中第二个模板参数是函数类型,创建时还要将真正的函数地址放进来。将各种基本元素类型的hash组合起来,std::hash< std::string>()是一个对象,可以当函数来使用。typename… Types任意多的模板参数,可变参数模板。函数1和函数2,函数3的区别是第一个模板参数的类型不一样,虽然同名函
摘要由CSDN通过智能技术生成

为一个类,构建一个Hash Function。有两个办法,一是设计为成员函数,但是为了调用成为函数对象,需要重载operator();二是设计成普通函数。第二种方法中,<>中第二个模板参数是函数类型,创建时还要将真正的函数地址放进来。
在这里插入图片描述
将各种基本元素类型的hash组合起来,std::hash< std::string>()是一个对象,可以当函数来使用。
typename… Types任意多的模板参数,可变参数模板。函数1和函数2,函数3的区别是第一个模板参数的类型不一样,虽然同名函数。其实先调用的都是最泛化的版本,这里是函数1,假设原来参数有8 个,产生一个种子(seed),即一个种子加8个参数。然后调用函数2,函数2将8个参数变成1+7,将这1个参数去变化种子,这时候就是种子+7个参数,编译期递归编译。
可变参数模板将不定量的参数拆解,进行递归。种子是pass_by_reference,会一直改变。借由这个可变参数模板可以任意参数类型,任意参数个数。
种子的运算:产生的数字越乱越好。
在这里插入图片描述
0x9e3779b9这个16进制数:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值