内容: 今天在看STL源码剖中的hashtable这一节时,书中讲述hashtable的hash散列函数对大多数int,char,short类型什么都不做,直接返回,对字符串的书中有一个对字符串每个字符的ASCII值乘5叠加的公式计算哈希值,然后对float,double,string等特殊的没有进行处理,并给出了若没有自己定义对它们的散列函数,那么插入会出错的例子,由于hash_set是以hashtable为基础实现的,所以hashtable没有办法处理的类型,hash_set也没有办法处理。我自己测试了一下,发现跟书中讲的不一样,现在的编译器已经加入了很多类型的哈希散列函数。
vs2012下查找hash_set的散列函数:
在STL源码剖析中展示的hash函数列表中并没有float和double类型,不过在vs下我去翻了下,翻到了float和double的hash函数。
感受:STL源码剖析中的例子有部分在现在的编译器上进行测试是跟书的不一样,应该是作书当时还比较早,很多东西还没有完善,不过现在的编译器比当时已经进步很多了,STL标准也加入了很多东西,书里介绍的哈希容器是hash_set,hash_map,不过我看的c++书,很多介绍的是unordered_map和unordered_set。在leetcode上刷题也用的新的哈希容器了,不过STL中的介绍对于理解新的哈希容器应该会有很大的帮助。