boolan——c++学习笔记之STL哈希表探究
2017-03-15 22:08
316 查看
一、简介
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容器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容器使用。
相关文章推荐
- boolan——c++学习笔记之STL迭代器分类
- C++ STL学习笔记八 multiset多重集合容器
- 【C++ 学习笔记】:STL-multimap
- C++之Effective STL学习笔记Item7
- C++ STL学习笔记4--list
- STL学习笔记----C++的新语言特性
- C++ Standard Stl -- SGI STL源码学习笔记(04) stl_deque && 初涉STL内存管理
- C++ STL 学习笔记
- C++ Standard Stl -- SGI STL源码学习笔记(07) stl_vector 与 一些问题的细化 3 resize函数剖析
- C++之Effective STL学习笔记Item21
- C++ STL学习笔记三 deque双端队列容器
- 【C++ 学习笔记】:STL-multimap
- C++ Standard Stl -- SGI STL源码学习笔记(05) stl_vector 与 一些问题的细化 1
- C++精华(STL)学习笔记之算法
- C++ STL 学习笔记
- C++精华(STL)学习笔记之算法
- C++ Standard Stl -- SGI STL源码学习笔记(01) auto_ptr
- C++ STL 学习笔记
- C++ STL学习笔记2--String
- C++ Standard Stl -- SGI STL源码学习笔记(06) stl_vector 与 一些问题的细化 2 push_back函数剖析