天天看點

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

繼續閱讀