C++标准模板库(STL)——map常见用法详解

  • 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

 

posted @ 2021-06-02 14:30  熊猫耳朵  阅读(73)  评论(0编辑  收藏  举报