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

map的operator[]的实现

map的operator[]的实现

operator[]里包含插入操作,所以我们先看一下首先看一下map的insert函数

image-20250304115756303

返回值是一个pair类型。正常的常见的insert,插入成功返回true,失败返回false

这里设计的insert不单单返回布尔值,而是返回一个pair类型,包含迭代器和布尔值。就是为了实现operator[]

插入规则:

  1. key已经在map中,返回pair(key_iterator, false) (返回key位置的迭代器)
  2. key不在map中,返回pair(newly_inserted_iterator, true) (返回新插入元素的迭代器)

所以,insert也充当了查找的作用

那么operator[]是如何实现的呢?

operator[key]:

  1. 若key存在,返回value的引用
  2. 若key不存在,新插入一个pair(key, value()),并返回value的引用

所以operator不管怎样,都会返回key对应的value的引用,只是有可能value是新插入的。因此就可以这样来写:

V& operator[](const K& key){
    pair<iterator,bool> ret = insert(make_pair(key,V()));
    return ret.first->second;
}

// 简写:
V& operator[](const K& key){
    return ((insert(make_pair(key,V()))).first)->second;
}

这里有两个pair。一个是insert的返回值的pair<iterator,bool> ;另一个是iterator指向的元素 pair<key_type,value_type>

http://www.dtcms.com/a/49559.html

相关文章:

  • 字节旗下两款AI编程工具
  • 搭建laravle 数字产品销售平台 php
  • IO标准函数和时间函数
  • excel 数据透视表的创建、快速更新、格式修改
  • 分布式锁—Redisson的可重入锁
  • 2025.3.4
  • 音频3A测试--AEC(回声消除)测试
  • python连接neo4j的方式汇总
  • 使用 Apache POI 实现 Excel 单元格合并
  • 大模型工程师学习日记(十一):FAISS 高效相似度搜索和密集向量聚类的库
  • 探究DeepSeek R1与OpenAI模型文本相似度背后的秘密
  • Ubuntu20.04双系统安装及软件安装(十二):nomachine
  • 用AI学安卓游戏开发1——控制小球上下左右移动2
  • 网络安全的八大机制
  • kaggle竞赛(初识)
  • 74道高级Java面试合集,java开发模式面试题
  • 5、使用 pgAdmin4 图形化创建和管理 PostgreSQL 数据库
  • python:pymunk + pygame 模拟六边形中小球弹跳运动
  • 使用GitLink个人建站服务部署Allure在线测试报告
  • 【Swift 算法实战】存在重复元素 III
  • 第五天 Labview数据记录(5.2 Text文件读写)
  • 鸿蒙5.0实战案例:基于webview拉起自定义键盘
  • VS2015 c++和cmake配置编程
  • Github 2025-03-03 开源项目周报Top14
  • QTableWidget之表格列的隐藏与显示(折叠)
  • C++并发以及多线程的秘密
  • C#—csv文件格式操作
  • stm32移植LCD2002驱动
  • 爬虫逆向实战小记——解决webpack实记
  • 歌叽歌叽V2.0.5--原创音乐制作工具安装与部署