算法笔记 STL map

 1 #include<cstdio>
 2 #include<map>   //map会以键从小到大的顺序自动排序,map,set内部是用红黑树实现的 
 3 using namespace std;//建立映射的过程中会自动实现从小到大排序功能
 4 bool print(map<char, int> a){
 5     for(map<char, int>::iterator it = a.begin(); it != a.end(); it++){
 6         //map可以用it->first访问键,it->second访问值 
 7         printf("%c %d\n", it->first, it->second);
 8     }
 9     printf("\n");
10 }
11 int main(){
12     map<char, int> mp;
13     mp['a'] = 20;
14     mp['b'] = 30;
15     
16     //通过下标访问
17     printf("1--------------\n");
18     printf("%d %d\n\n", mp['a'], mp['b']);
19     
20     //通过迭代器访问,map迭代器的定义和其他STL容器迭代器的方式相同
21     //迭代器定义: map<char, int>::iterator it; 
22     mp['c'] = 40;
23     mp['d'] = 50;
24     mp['e'] = 10;
25     mp['f'] = 5;
26     printf("2--------------\n");
27     print(mp);
28     
29     //(1)find(),find(key)返回键为key的映射的迭代器,时间复杂度为O(LogN),N为map中映射的个数
30     printf("3--------------\n");
31     map<char, int>::iterator it2 = mp.find('b');
32     printf("%c %d\n\n", it2->first, it2->second);
33     
34     //(2)erase()
35     //有两种用法:删除单个元素,删除一个区间的元素
36     //①删除单个元素
37     printf("4.1------------\n");
38     mp.erase(it2); //it2为需要删除的元素的迭代器,时间复杂度为O(1)
39     print(mp);
40     printf("4.2------------\n");
41     mp.erase('a'); //删除键为a的映射,即a 20 
42     print(mp);
43     //②删除一个区间内的所有元素
44     printf("4.3------------\n");
45     /*
46     mp.erase(first,last),first为需要删除的区间的起始迭代器,而last为需要删除的区间的末尾
47     迭代器的下一个地址,也即为删除左闭右开的区间[first,last).时间复杂度O(last - first) 
48     */
49     map<char, int>::iterator it3 = mp.find('e');
50     mp.erase(it3,mp.end());
51     print(mp);
52     
53     //(5)size()
54     printf("5------------\n");
55     //size()用来获取map中映射的对数,时间复杂度为O(1)
56     printf("%d\n", mp.size());
57     
58     //(5)clear()
59     printf("5------------\n");
60     //clear()用来用来清空map中所有的元素,时间复杂度为O(N),N为map中元素个数 
61     printf("%d\n", mp.size());
62     
63     return 0; 
64 } 

运行结果:

1--------------
20 30

2--------------
a 20
b 30
c 40
d 50
e 10
f 5

3--------------
b 30

4.1------------
a 20
c 40
d 50
e 10
f 5

4.2------------
c 40
d 50
e 10
f 5

4.3------------
c 40
d 50

5------------
2
5------------
2

猜你喜欢

转载自www.cnblogs.com/zjsaipplp/p/10415675.html