我们之所以使用map进行数据的存储,主要是因为:map的查找时间复杂度为O(1),而数组遍历的查找时间复杂度为O(n),所以我们可以使用空间换时间,在一些情况中使用map来代替数组遍历进行查找。
map概述
map是基于红黑树实现。红黑树作为一种自平衡二叉树,保障了良好的最坏情况运行时间,即它可以做到在O(log n)时间内完成查找,插入和删除,在对单次时间敏感的场景下比较建议使用map做为容器。比如实时应用,可以保证最坏情况的运行时间也在预期之内。
另红黑树是一种二叉查找树,二叉查找树一个重要的性质是有序,且中序遍历时取出的元素是有序的。对于一些需要用到有序性的应用场景,应使用map。
unordered_map是基于hash_table实现,hash_table最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间O(1);而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。
使用数组下标代替map(元素有限比较少,比如字母对应索引)
使用数组代替map主要是为了降低空间利用率。
-
- 有效的字母异位词
-
- 找不同
-
- 赎金信(完全同242)
-
- 拼写单词
- 剑指 Offer 03. 数组中重复的数字
-
- 两个数组的交集(两个求交集)
-
- 查找常用字符(两个以上求交集)
- 剑指 Offer 50. 第一个只出现一次的字符
set代替map
-
- 两个数组的交集
-
- 快乐数
-
- 宝石与石头
-
- 独一无二的出现次数
map
-
- 两数之和
-
- 两数之和 III - 数据结构设计
-
- 子域名访问计数(考察map以及字符串操作)
-
- 好数对的数目
-
- 找出变位映射
-
- 前五科的均分(自定义比较函数)
-
- 回文排列
-
- 两句话中的不常见单词(分割字符串)
-
- 常数时间插入、删除和获取随机元素