当前位置: 首页 > news >正文

双重map 的赋值初始化

示例分析

#include <iostream>
#include <map>
using namespace std;typedef std::map<uint32_t, int> ST_ATTR; // 内层map:key=uint32_t,value=inttypedef std::map<uint16_t, ST_ATTR> ST_CTRL; // 外层map:key=uint16_t,value=内层mapint main() {ST_CTRL ctrlMap; // 实例化外层map// 嵌套赋值ctrlMap[1][1] = 1;// 验证结果cout << "外层map键1对应的内层map中,键1的值为:" << ctrlMap[1][1] << endl; // 输出:1return 0;
}

过程分析

ctrlMap[1][1] = 1; 的执行过程为:

  • 外层 map 操作:ctrlMap[1] 检查外层 map 中是否存在键 1(uint16_t 类型)。
  • 若不存在,自动插入键 1,并关联一个默认构造的内层 map
  • 返回内层 map 的引用(ST_CTRL_MAP_DBLINKID_ATTR&)。

内层 map 操作:[1] = 1

  • 对第一步返回的内层 map 执行 [1]:检查内层 map 中是否存在键 1(uint32_t 类型)。
  • 若不存在,自动插入键 1,并关联一个默认值(int 类型默认值为 0)。
  • 最后将该值赋值为 1。

注意事项

  • 这种方式会自动插入不存在的键:如果外层键 1 或内层键 1 原本不存在,operator[] 会自动创建它们,这在大多数场景下是方便的,但需注意是否符合业务逻辑(比如是否允许自动创建新键)。

  • 若需避免自动插入(仅修改已存在的键),需先通过 find 检查键是否存在,再操作:

typedef std::map<uint32_t, int> ST_ATTR; // 内层map:key=uint32_t,value=inttypedef std::map<uint16_t, ST_ATTR> ST_CTRL; // 外层map:key=uint16_t,value=内层map// 安全写法:仅修改已存在的键
ST_CTRL::iterator outer_it = ctrlMap.find(1);
if (outer_it != ctrlMap.end()) 
{ // 外层键1存在auto& inner_map = outer_it->second;auto inner_it = inner_map.find(1);if (inner_it != inner_map.end()) { // 内层键1存在inner_it->second = 1;}
}
http://www.wxhsa.cn/company.asp?id=2883

相关文章:

  • 0voice-1.4.1
  • 9.13 模拟赛 T3
  • Docker应用 - FileBrowser
  • AI踩坑之Nlog使用
  • 论文解读-《OpenGSL A Comprehensive Benchmark for Graph Structure Learning》 - zhang
  • Cmake介绍
  • Git 生成 ssh key
  • 基础篇:消息队列理论部分,另一种环境搭建Docker运行RabbitMQ
  • 项目案例作业1:学生信息管理系统(面向对象初步接触)
  • P1097 合唱队形
  • 一生一芯学习:pa2.1 RTFM
  • Linux网络:初识网络 - 详解
  • 20250909比赛总结
  • 又寸入生白勺司烤
  • Ubuntu 安装 GIPM
  • 手动下载vscode扩展的方法
  • GAS_Aura-Aura Projectile
  • CF1583F Defender of Childhood Dreams
  • scrollArea无法滚动
  • 时间序列分析(1)
  • 一行代码没写,做了一个小程序
  • 【置顶】欢迎来到 ziyaojia 的主页
  • copyparty 是一款使用单个 Python 材料实现的内网文件共享软件,具有跨平台、低资源占用等特点,适合需要本地化文件管理的场景
  • ZYNQ Ultrascale+系列部署yolo v10(暂定,若过于艰难则考虑降级或FQ)
  • 【EF Core】再谈普通实体关系与 Owned 关系的区别
  • qoj6104 Building Bombing
  • 必知必会:使用serializers.Serializer在views.py视图文件中序列化和反序列化过程的开发模板
  • Cursor小程序实战五:Cursor对接微信两大核心问题
  • 电商系统的Mysql表设计是怎么样呢
  • Docker应用 - CloudSaver