STL的Map和Hashmap比较(面试)

【1】区别:

 1、构造函数 hash_map需要hash函数,等于函数;map只需要比较函数(小于函数)。
 2、存储结构 hash_map采用hash表存储,map一般采用红黑树实现。因此内存数据结构是不一样的。
 3、STL的map底层是用红黑树实现的,查找时间复杂度是log(n);
 4、STL的hash_map底层是用hash表存储的,查询时间复杂度是O(1);

【2】什么时候用map,什么时候用hash_map?

总体来说,hash_map 查找速度会比map快,而且查找速度基本和数据数据量大小,属于常数级别;
而map的查找速度是log(n)级别。并不一定常数就比log(n)小, hash还有hash函数的耗时,明白了吧
,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash_map。但若你对内存使用特别
严格,希望 程序尽可能少消耗内存,那么一定要小心,hash_map可能会让你陷入尴尬,特别是当你
的hash_map对象特别多时,你就更无法控制了,而且 hash_map的构造速度较慢。
现在知道如何选择了吗?权衡三个因素: 查找速度, 数据量, 内存使用

【3】Hashmap产生冲突如何处理,如何优化?

STL 中 HashMap 解决冲突一般采用链表法,其特点是利用空间换时间,查找复
杂度能达到常数级别。通常还有一种解决冲突的办法,开放地址法,分别有线性
探测(Linear probing)、二次探测(Quadratic probing)、二次哈希(Double 
hashing)三种方式。
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值