一、operator[] 底层 与 insert() 返回值
[std::map::operator[]]: https://legacy.cplusplus.com/reference/map/map/operator/
"A call to this function is equivalen to: … " —— 这个函数调用相当于:
make_pair(k, mapped_type())
为了方便后续讲解,把创建的 pair 变量记为pair_val
。
k ——> key ;mapped_type() ——> value
this->insert(pair)
把该式的返回值结果记为pair<Iterator_pair_val, bool>
- map::insert() 的返回值为一个 pair ,pair::first 为指向键值(key)为 val 的迭代器 —— 无论是新插入的,还是已经存在着的。
- 如果这个 val 是新插入的,则 pair::bool 为 true ;如果 val 已经存在, pair::bool 为 false 。
*(pair<Iterator_pair_val, bool>.first)
取到 pair_valpair_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[] 效率更高。