STL map中subscript操作符用法

map是STL中基于红黑树的一种数据结构,该结构的元素是pair<key,value>,其中key是元素的键值,搜索时使用,value是元素的实值,是这棵树中真正要保存的东西。map的函数基本是基于底层的红黑树的,也有一些是自有函数,比如subscript操作符,即“[ ]”。

作出以下函数验证subscript操作符:

map<string,int> imap;
pair<string,int> tmp("A",1);
imap.insert(tmp);
imap[string("B")]=2;//当“[ ]”返回的元素作为左值运用时,如果没有‘B’,则在红黑树中插入这个节点,如果有‘B’,则返回指向这个节点的迭代器。
int second=imp[string("C")];
map<string,int>::iterator imapIter=imap.begin();
while(imapIter!=imap.end())
{
  cout<<(*imapIter).first<<" "<<(*imapIter).second<<endl;
  imapIter++;
}

以上程序的结果是:

A 1
B 2
C 0
程序表明subscirpt操作符不单单是个提领的过程,它里面隐含着插入操作,考察map中subscript源码: 

template<class T>
public: 
T& operator[] (const key_type &k)
{
   return (*((insert(value_type(k,T()))).first)).second
}

所以,使用map中的下标操作符要注意了,里面是隐含有插入的,不分左值情况和右值情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值