数据结构-哈希表

哈希表(散列表)

个人理解跟字典挺像的,就是通过键来访问值。
在这里插入图片描述

  • std::unordered_set(集合)
  • std::unordered_map(数组)
  • std::multiset(value可重复)
  • std::multimap(key可重复)

由值映射到索引的过程被称为哈希映射,采用的是哈希函数,哈希函数也就是映射的规则,但有时候不同的值会被映射到相同的索引下,这一现象叫做哈希碰撞

一般哈希碰撞有两种解决方法, 拉链法和线性探测法。

拉链法

拉链法就是。将冲突的两个值用链表存储起来,还是跟原来的索引保持映射关系,这样就可以通过索引同时找到两个值。

拉链法要选择适当的哈希表(也就是映射表)的大小,这样既不会因为数组(值的存储空间)空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多时间。

线性探测法

使用线性探测法,一定要保证索引空间大于值空间。 依靠哈希表中的空位来解决碰撞问题。当新的值被映射到的索引已经被使用了,就转而寻找新的空位。

为了更好的应用哈希表,推荐leetcode习题:1, 49, 128

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值