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

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

  • map::insert() 的返回值为一个 pairpair::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[] 效率更高

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值