尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

二维下标极大数组(二维 map)

二维下标极大数组(二维 map)
📅 发布时间:2026/6/19 16:10:08

在遇到某些题的时候,我们会遇到下标 \(x,y\) 范围较大(如\(10^6\))但点数较小(比如就 \(10^5\) 个)的情况。如果只有一个 \(x\) 的话我们会选择使用 map 或者 unordered_map 来解决,但是如果是二维,这就有些难办了。

pair 转化(自写 hash)

因为点实际上很少,只不过是下标的范围太大了,我们没必要真的开那么大的数组,只需要想办法给这个两个下标搞出一个唯一的标记即可。使用 pair 就可以达到这一点。

因此我们可以使用 pair 作为 map 的第一键值,从而实现二维下标的一维化。

优点是简洁,易写。

缺点是 unordered_map 无法使用 pair 作为第一键值,因为 unordered_map 本身没有 pair 的 hash 方法,因此如果想给 unordered_map 使用就只能自写 hash,但是这很困难、很麻烦,而如果不用 unordered_map 的话,一般情况下就只能使用 map,而 map 带有 \(\operatorname O(\log n)\) 的排序,而我们往往不需要这个,排序,这就会拖慢我们的程序。对于时间不友好。

总的看,这种办法不怎么好。

二维下标一维化

即使用进制的办法,把二维的下标转化为一维的一个数里面去。比如:如果 \(x,y \in [1, N]\),那么 \(id = x \times N + y\),通过这种方式,把两个 \(x,y\) 化成一个数字。通过这种方式,就可以用一维的 unordered_map 去存储二维下标,兼顾了时间和空间,而且简单。

缺点也是有的,就是这个 \(id\) 的范围不能太大,不能把 longlong 给爆掉(unorderd_map 无法使用 int128 作为第一键值)。因此如果这个 \(x,y\) 的范围不超过 \(10^9\) 的话,这种办法是很棒的。(一般的 \(x,y\) 范围也不会超过 \(10^9\),因此这个方法基本够用)

使用字符串 string 作为第一键值

这个方法和 pair 类似,但是好处的 unordered_map 可以使用,但相对的是使用不算方便,且效率相对较低(一般比二维下标一维化要慢上个小 \(10\) 倍)。

拼接字符串是很难受的,而且直接拼接会出现冲突情况。如 \(x = 24, y= 123\) 和 \(x = 242, y = 23\) 这两组在拼接后的字符串都是 \(24123\),因此不算是一种好办法。

map 嵌套

即把 map 的第二键值设为另一个 map,从而实现二维 map。

因为 map 依靠第一键值进行排序,所以第一键值必须可以对比大小,而当另一 map 在第二键值,就相当于当前 map 里面存的还是 map,这个 map 可以再次使用 [] 进行索引,就可以像使用二维数组一样使用 map,如下:

map<int, map<int, int>> q;
q[x][y] = 1234;

这是一种真正的二维 map,通过这种方式,我们还可以实现三维、四维,或者 \(n\) 维。并且使用方便,对于下标完全没有范围限制,非常适合使用。

但是因为是基于 map(unordered_map 无法嵌套)所以在时间上会多出一个 \(\log n\),且嵌套 \(m\) 维,就需要多花 \(m \log n\) 的时间。因此在时间允许的情况下,可以使用这种方式,进行二维极大数组的存储。

相关新闻

  • CF932E Team Work
  • KDL - 金山云数据湖系统参数
  • streamlit构建dashboard

最新新闻

  • 大兴安岭地区黄金回收去哪儿好?整理了5家靠谱实体店地址电话 - 三大殿
  • 承德市今日黄金回收价格多少?本地5家口碑门店报价参考 - 马刺总冠军
  • 2026 正规备案收金店,称重透明结算无隐藏扣费 - 讯息早知道
  • 贺州市黄金回收实体店怎么选?这份清单帮你货比三家 - 开始就结束
  • 金华市黄金回收猫腻多怎么办?整理了5家诚信回收店供参考 - 三大殿
  • 2026安徽省宣城市中考一两百分怎么办?口碑优选宠物护理专业最新发布 - cc江江

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号