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

31 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## $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 (面向竞赛)](https://blog.csdn.net/weixin_72391681/article/details/141476913)
>
**$Q_5$:那是不是用数组就一定不可以实现上面的场景了?**
答:当然不是,数组是一切数组结构的基础。
这就需要排序+去重+二分查找了,举个例子:
>[AcWing 802. 区间和](https://www.cnblogs.com/littlehb/p/15241960.html)