Files
python/TangDou/Mkx/【码客行C1课程同步训练】Map专题.md
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

1.8 KiB
Raw Blame History

$Map$专题

$Q_1:$$Map$用在什么场景? 答:以$O(1)$时间高速的查询到某个键值。

$Q_2:$数组的桶也能做类似的操作,为什么还需要$Map$? 答:因为数组桶的上限受内存容量限制 一般$OI$考试的题目的 时/空限制:1s/64MB 或 时/空限制:2s/128MB

以$128MB$为例,$128M=131072KB=134217728$字节 $int=4$字节,开$int$型变量的一维数组最多是$3$千万=3∗10^7,但考虑到程序运行不可能把内存都分配给一个数组,一般最大就是$1e6$。

Q_3:能不能举个例子,说明数组桶不行,而$Map$可以? 答:假设有$n$个元素,每个元素的数据范围是全部整数,但输入只有$10000$个,让你统计一下元每个元素出现的次数。此时,值域太大,不可能用数组桶开一个$INT_MAX$大小的数组,但数量不是特别多,是$10000$个,这样用$Map$最合适。

Q_4:$Map$据说还有两种,有什么区别? 答:$Map$在$C++$中确实有两两种实现,一种是$unordered_map$,一种是$map$。故名思义,$unordered_map$是无序$MAP$,哈希表实现,而$map$是有序MAP,二叉树实现。

区别:

  • $unordered_map$运行速度更快,不会$TLE$,时间复杂度O(1)
  • $map$运行速度稍慢,时间复杂度:O(logn) 但一般现在CSP-J,$CSP-S$中用$MAP$应该也够用

参考文档 加强理解 unordered_map (面向竞赛)

Q_5:那是不是用数组就一定不可以实现上面的场景了? 答:当然不是,数组是一切数组结构的基础。 这就需要排序+去重+二分查找了,举个例子:

AcWing 802. 区间和