一、简介
c++STL容器unordered_set、unordered_map、unordered_multiset、unordered_multimap内部是用哈希表实现的,以下将详细介绍c++STL哈希表的实现。
二、哈希表排列结构
1、哈希表buckets个数大于元素个数,当元素个数大于等于buckets个数时,哈希表将rebuild,扩大buckets个数,GNU C2.9 buckets个数增量表如下图所示,默认为53,增量为质素,大小因编译器不同可能不一样。
2、哈希表中key不能被改变,数据可以更改。
3、哈希命中到同一位置,将以链式存储元素。
三、代码分析
1、GNU C 2.9实现模板hashtable需要传入6个参数,
Value:数据+键值
Key:键值
HashFun:哈希函数,用以返回一个哈希值,再经过运算得到元素存放位置
ExtractKey:从value中提取key
EquelKey:比较key的方式
Alloc:分配器
四、哈希表应用
1、直接运用容器的hashtable,传入相应参数,添加元素到哈希表中。
五、STL容器unordered_set的哈希表应用
1、unordered_set、unordered_map、unordered_multiset、unordered_multimap模板定义,内部均使用了hashtable。
2、unordered_set容器使用。
本文详细介绍了C++ STL中哈希表的实现原理,包括哈希表的排列结构、内部实现细节以及如何应用于STL容器如unordered_set等。通过具体示例展示了哈希表在元素存储和查找方面的高效性。
746

被折叠的 条评论
为什么被折叠?



