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中的下标操作符要注意了,里面是隐含有插入的,不分左值情况和右值情况。