boolan——c++学习笔记之STL哈希表探究

本文详细介绍了C++ STL中哈希表的实现原理,包括哈希表的排列结构、内部实现细节以及如何应用于STL容器如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容器使用。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值