当前位置: 首页 > 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.zskr.cn/news/3839.html

相关文章:

  • 0voice-1.4.1
  • AI踩坑之Nlog使用
  • 论文解读-《OpenGSL A Comprehensive Benchmark for Graph Structure Learning》 - zhang
  • Git 生成 ssh key
  • 一生一芯学习:pa2.1 RTFM
  • 一行代码没写,做了一个小程序
  • copyparty 是一款使用单个 Python 材料实现的内网文件共享软件,具有跨平台、低资源占用等特点,适合需要本地化文件管理的场景
  • 电商系统的Mysql表设计是怎么样呢
  • Docker应用 - CloudSaver
  • Web 3
  • Cursor小程序实战系列一:0到1开发一个小程序,需求整理、小程序注册备案
  • 赛题
  • .gitignore 文件
  • MySQL集群高可用架构 - 指南
  • 在Kubernetes中DaemonSet无法在master节点调度的问题
  • 9 12-
  • 在CentOS 7系统中彻底移除MongoDB数据库
  • 【数学建模】烟幕干扰弹投放策略优化:模型与算法整合框架 - 实践
  • 开源排名算法工具raink:利用LLM实现智能文档排序
  • Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
  • 中大型水闸安全监测的重要性及实施方法 - 指南
  • python 轻量级别的网页包Streamlit
  • 大模型基础|位置编码|RoPE|ALiBi
  • grafana部署并使用harbor监控模板
  • 成品app直播源码搭建,sql优化原则 - 云豹科技
  • 使用Clang静态分析技术追踪Heartbleed漏洞
  • 川土微CA-IF1051S、CA-IF1051VS 支持CAN FD
  • 十六、异常和中断的响应过程
  • 关于前端的一些疑问整理(标签属性值和符号)
  • 思考 | 躺平者的本质和区别