聲明:這篇文章中有參考引用(已表明)。
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