c++ map的存储结构_【数据结构】Leetcode——哈希表

本文探讨了C++中的map和unordered_map的数据结构,强调了它们在哈希函数和处理哈希碰撞冲突上的区别。map基于红黑树,保证有序性,而unordered_map采用哈希表,提供更快的查找速度但无序。文章通过列举LeetCode题目,如两数之和、数组的交集等,展示了这两种数据结构在解决实际问题中的应用。
摘要由CSDN通过智能技术生成

我相信爱情的纯粹

2e779a7cce0bebe5c72e8641cf4719ac.png 开始之前学习一个单词热热身:      hash 英[hæʃ]      n. (回锅) 肉丁土豆; (尤指电话上的) #号;      v. 反复推敲; 仔细考虑; 把……弄糟(乱); 斩碎; 斩(肉); 剁(肉); 细切(肉);      [例句]The Government made a total hash of things and squandered a small fortune
     哈希表就是一种以 键-值(key-value)存储数据的结构,只要输入key,即可查找到其对应的值。     哈希表通过在value的存储位置和它的key之间建立一个确定的对应关系f(这个对应关系称为哈希函数),使每个key与数据结构中的一个唯一的存储位置相对应。     一般哈希表都是用来快速判断一个元素是否出现集合里。 使用哈希查找有两个步骤:
  1. 使用哈希函数将被查找的键转换为数组的索引。
  2. 在理想的情况下,不同的键会被转换为不同的索引值,但是在有些情况下需要处理多个键被哈希函数映射到同一个索引值的情况,所以哈希查找的第二个步骤处理哈希碰撞冲突。哈希碰撞冲突的方法包括拉链法线性探测法等。
     哈希表是一个在时间和空间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。那么所有的查找时间复杂度为O(1);如果没有时间限制,那么可以使用无序数组并进行顺序查找,这样仅需较少的内存。哈希表使用了适度的时间和空间来在这两个极端之间找到了平衡。只需要调整哈希函数算法即可在时间和空间上做出取舍。 C++中unordered_map与map的对比:      unordered_map和map类似,都是存储key-value的值,可以通过key快速索引到value;      不同点:
  1. unordered_map不会根据key的大小进行排序,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历,内部元素自动排序。

  2. map的底层实现是二叉平衡树(红黑树);hashmap的底层是一个hashtable;运行效率方面:unorderedmap最高,而map效率较低但提供了稳定效率和有序的序列;占用内存方面:map内存占用略低,unorderedmap内存占用略高,而且是线性成比例的。

  3. c++中,map是红黑树,中序遍历有序;unordered_map是哈希表,属于无序存储。

以下为leetcode中有关哈希表的经典题。
Contents
    • 1 两数之和(1)

    • 2 存在重复元素(217)

    • 3 最长和谐子序列(594)

    • 4 最长连续序列(128)

    • 5 两个数组的交集I(349)

    • 6 两个数组的交集II (350)

    • 7 四数相加 II(454)

    • 8 快乐数(202)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值