map::operator[] 底层大致介绍及与 map::insert() 区别

简介: map::operator[] 底层大致介绍及与 map::insert() 区别

一、operator[] 底层 与 insert() 返回值

[std::map::operator[]]: https://legacy.cplusplus.com/reference/map/map/operator/

"A call to this function is equivalen to: … " —— 这个函数调用相当于

  1. make_pair(k, mapped_type()) 为了方便后续讲解,把创建的 pair 变量记为 pair_val

k ——> key ;mapped_type() ——> value

  1. this->insert(pair) 把该式的返回值结果记为 pair<Iterator_pair_val, bool>

  • map::insert() 的返回值为一个 pair ,pair::first 为指向键值(key)为 val 的迭代器 —— 无论是新插入的,还是已经存在着的。
  • 如果这个 val 是新插入的,则 pair::bool 为 true ;如果 val 已经存在, pair::bool 为 false 。
  1. *(pair<Iterator_pair_val, bool>.first) 取到 pair_val
  2. pair_val.second 以此实现对 mapped_type() 的修改

二、向 map 中添加一个元素,有什么区别?

2.1 被添加的元素 事先在 map 中不存在

根据 上一部分内容 ,调用 map::operator[] 添加元素时,会通过调用 map::insert() 完成插入,因此在这种情况下,直接调用 insert() 效率更高

2.2 被添加的元素 事先在 map 中存在

假设 map 中已经存在 pair<key1, value1>

调用 insert(pair<key1, value2>)不能直接对 key1 所映射的 value 值 进行修改 ,需要对 insert 的返回值进行一系列操作,才能实现。

在这种情况下,调用 map::operator[] 效率更高

相关文章
|
7月前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
105 3
|
7月前
|
JavaScript 前端开发 索引
问js的forEach和map的区别
JavaScript中的`forEach`和`map`都是数组迭代方法。`forEach`遍历数组但不修改原数组,无返回值;它接受回调函数处理元素。`map`则遍历数组并返回新数组,新数组元素为回调函数处理后的结果。两者都接收元素、索引和数组作为回调函数参数。
57 7
|
2月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
|
2月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
41 1
WK
|
3月前
|
Python
map和filter的区别是什么
`map()`和`filter()`均为Python中的高阶函数,前者针对可迭代对象中的每个元素执行指定操作,如数值翻倍或字符串转大写;后者则筛选出符合条件的元素,例如仅保留偶数或非空字符串。两者均返回迭代器,并可通过`list()`等函数转换为所需的数据结构。具体使用时,应依据实际需求和场景选择合适的函数。
WK
25 1
WK
|
3月前
map和filter的区别是什么
在编程中,`map` 和 `filter` 是处理数组或集合时常用的两个函数。`map` 用于将每个元素通过指定函数转换后生成新的数组,而 `filter` 则根据条件筛选出符合条件的元素组成新数组。两者的主要区别在于:`map` 的返回数组长度与原数组相同,但元素被转换;`filter` 的返回数组长度可能不同,只包含符合条件的元素。
WK
38 2
|
3月前
数组方法中的`forEach()`方法和`map()`方法有什么区别?
数组方法中的`forEach()`方法和`map()`方法有什么区别?
|
4月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
4月前
|
分布式计算 Serverless 数据处理
|
4月前
|
存储 Java 索引