std::map的一些常見用法和個別注意事項

聲明:這篇文章中有參考引用(已表明)。


1、map中添加元素
首先map中的鍵值(key)存入的時候是以常量的類型存入的,我們可以從map的成員函數value_type看出。

typedef pair<const Key, Type> value_type;(A type that represents the type of object stored as an element in a map.)
所以接下來的幾中添加元素的方式就需要注意了:
map<string, int> grade_map;
① grade_map.insert(pair<string, int>("Math", 90));//添加元素時需要強轉
grade_map.insert(make_pair("Chinese", 88));//添加元素時需要強轉
grade_map.insert(map<string, int>::value_type("English", 85));//添加元素時不需要強轉
grade_map["C++"] = 90;//添加元素時需要強轉
   

注意:  如果map中已經有了對應key,那麼insert操作將失敗,也不會給此鍵值對應的映射value賦值。
但是第④種方式有所不同,沒有此鍵值則添加,有此鍵值則重新賦值。
map中的2個值:key_type;(鍵值)
      value_type;(pair對)

2、map中刪除元素

map::erase(); 刪除指定元素或者指定範圍元素。
map::clear();刪除所有元素。

map<string, int>::iterator itr = grade_map.begin();
while (itr != grade_map.end())
{
if ("Math" == itr->first)
{
grade_map.erase(itr++);//先對迭代器加1,然後再刪除。這樣可以防止迭代器失效
}
else
itr++;
}

注意:map中刪除元素時,只是當前迭代器失效。

3、map常用函數
begin();end();
find();沒找到返回尾後迭代器,找到了返回對應鍵值的迭代器。
empty();爲空,返回true。
count(key);有對應元素返回1,沒有對應元素返回0。
size();返回當前map中元素的個數。

4、運用map[ ](插入運算符),(顧名思義這個運算符最好用在插入軟塑時)
map[key ],如果沒有此鍵值,則在對應鍵值位置構造一個默認初始化的value。
所以用這個插入符取值的時候,首先要判斷map中是否有此鍵值,在有的情況下使用比較安全。

如:(下面這一段是參考別人的,沒有找到原創地址,就加一個轉載地址吧:http://blog.csdn.net/nxx_168/article/details/7670757)
str_map[5] = "ee";
這條語句實際上是分兩個步驟執行的:
先在str_map[5]的地方構造一個空string,然後通過str_map[5]返回這個string的reference;
然後調用這個空string的assignment運算符,把"ee"賦給它。
因此,這樣寫要比直接insert效率低些。
索引還有一個問題是需要注意的:
map<int, string> m;
cout<<m.size()<<endl; // output: 0
if ( m[4] == "aa" )
 some_operation();
cout<<m.size()<<endl; //output: 1
這裏m[4]已經指向了一個構造好了的空string

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章