set与map的区别

  • set
  • multiset
  • unordered_set
  • unordered_multiset
  • map
  • multimap
  • unordered_map
  • unordered_multimap

set和map都要求key值唯一。
multiset和multimap的key值可以重复
ubordered_set和unordered_map是无顺序保存,其他都是自动按key值来排序。
set和map的底层都是红黑树
unordered_map和unordered_set低层是hashtable。

把key传入hash函数,计算出对应的数组的index,数组的index位置存放数据。

hash冲突:
不同的key计算出相同的index。
如何解决:

  • 线式探测
  • 拉链法:再冲突的index地方追加链表
  • 再哈希法:这种方法是同时使用多个不同的哈希函数,降低hash冲突的概率
  • 建立公共溢出区:这种方法的基本思想是:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。

hash原理:
hash表的原理是数组,使用hash函数计算出key作为数组的下标。
unordered_map类似java中的hashmap,默认初始化长度为16的数组作为hash表,使用拉链法解决hash冲突,如果数据超过阈值,改为使用红黑树来保存,这时候,就和map一样了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值