map使用小计--神奇的插入

一直走寻常路,平平淡淡

偶遇新人“热血”,涟漪泛泛

 

对于list、vector、map等的使用,一直都是凭感觉在用,没有深入其中看个究竟

这也就容易导致知其然而不知其所以然

也难以将已有功能应用到极致

这种毛病应该改改

 

今天就遇到一个相关问题,帮调试一段代码,安装一贯思维百思不得其解,代码如下:

  std::map<int, int> testmap;
  int value = testmap[0];

 

想着,这么写应该会挂,而运行结果却很正常,只是凭空增加了一条记录。

 

事实摆在眼前,没有理由反驳,看一下源码就一目了然了:

 

 mapped_type& operator[](key_type&& _Keyval)
  { // find element matching _Keyval or insert with default mapped
  iterator _Where = this->lower_bound(_Keyval);
  if (_Where == this->end()
   || this->comp(_Keyval, this->_Key(_Where._Mynode())))
   _Where = this->insert(_Where,
    _STD pair<key_type, mapped_type>(
     _STD move(_Keyval),
     mapped_type()));
  return ((*_Where).second);
  }

 

以后要注意了,还是先find吧

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值