## $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)