- map的定義
map<typename1, typename2> mp;
map需要確定映射前型別和映射后型別,所以需要在<>內填寫兩個型別,第一個是鍵的型別,第二個是值的型別,
注:如果是字串到整型的映射,必須使用string而不能使用char陣列,
map<string, int> mp;
- map容器內元素的訪問
map可以通過下標訪問或通過迭代器訪問,
(1)通過下標訪問
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 cout<<mp['c']; 10 return 0; 11 }
輸出結果: 2
(2)通過迭代器訪問
map迭代器的定義:
map<typename1, typename2>::iterator it;
map可以使用it->first來訪問鍵,使用it->second來訪問值,
實體:
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 mp['b']=3; 10 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){ 11 cout<<it->first<<" "<<it->second<<endl; 12 } 13 return 0; 14 }
輸出結果: a 1 b 3 c 2
從上面例子我們可以看出,map會以鍵從小到大的順序自動排序,這是由于map內部是使用紅黑樹實作的(set也是),
- map常用函式
(1)find()
find(key)回傳鍵值為key的映射的迭代器,時間復雜度為O(logN),N為map中映射的個數,
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 mp['b']=3; 10 map<char, int>::iterator it=mp.find('c'); 11 cout<<it->first<<" "<<it->second; 12 return 0; 13 }
輸出結果: c 2
(2)erase()
erase()可以洗掉單個元素,也可以洗掉一個區間的所有元素,
①洗掉單個元素
mp.erase(it),it為需要洗掉的元素的迭代器,時間復雜度為O(1),
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 mp['b']=3; 10 map<char, int>::iterator it=mp.find('c'); 11 mp.erase(it); 12 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){ 13 cout<<it->first<<" "<<it->second<<endl; 14 } 15 return 0; 16 }
輸出結果: a 1 b 3
mp.erase(key),key為欲洗掉的映射的鍵,時間復雜度為O(logN),N為map內元素的個數,
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 mp['b']=3; 10 mp.erase('c'); 11 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){ 12 cout<<it->first<<" "<<it->second<<endl; 13 } 14 return 0; 15 }
輸出結果: a 1 b 3
②洗掉一個區間內的所有元素
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 mp['b']=3; 10 map<char, int>::iterator it=mp.find('c'); //令it指向鍵為c的值 11 mp.erase(it, mp.end()); //洗掉it之后的所有映射 12 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){ 13 cout<<it->first<<" "<<it->second<<endl; 14 } 15 return 0; 16 }
輸出結果: a 1 b 3
(3)size()
size()用來獲得map中映射的對數,時間復雜度為O(1),
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 mp['b']=3; 10 cout<<mp.size(); 11 return 0; 12 }
輸出結果: 3
(4)clear()
clear()用來清除map中的所有元素,時間復雜度為O(N),
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 map<char, int> mp; 5 int main() 6 { 7 mp['a']=1; 8 mp['c']=2; 9 mp['b']=3; 10 mp.clear(); //清空map 11 cout<<mp.size(); 12 return 0; 13 }
輸出結果: 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285765.html
標籤:其他
下一篇:時間輪演算法
