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