C++ STL 容器之map
一、map简介
- 可以将任何基本类型映射到任何基本类型。如int array[100]事实上就是定义了一个int型到int型的映射。
- map提供一对一的数据处理,key-value键值对,其类型可以自己定义,第一个称为关键字,第二个为关键字的值
- map内部是自动排序的
二、用法
1.map定义:
map<type1 name, type2 name> mp; //第一个是键的类型,第二个是值的类型
2.map容器内元素访问
通过下标进行访问
mp['a'] = 5;
通过迭代器进行访问
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 map<char, int>mp; 7 mp['a'] = 65; 8 mp['b'] = 66; 9 mp['c'] = 67; 10 mp['d'] = 68; 11 map<char, int>::iterator it; 12 for(it = mp.begin(); it!=mp.end(); it++){ 13 cout<<it->first<<" "<<it->second<<endl; // it->first访问键,it->second访问值 14 } 15 return 0; 16 }
3. insert插入
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 map<string, int>mp; // 定义一个map对象 7 mp.insert(pair<string, int>("www", 1)); // 用insert插入pair 8 mp.insert(map<string, int>::value_type("aaa", 2)) ; // 用insert函数插入value_type数据 9 mp["bbb"] = 3; // 用数组方式插入 10 11 map<string, int>::iterator it; // mp迭代器 12 // mp.begin()返回指向mp头部的迭代器, mp.end()返回指向mp尾部的迭代器 13 for(it=mp.begin(); it!=mp.end(); it++){ 14 cout<<it->first<<" "<<it->second<<endl; 15 } 16 map<string, int>::reverse_iterator it2; 17 // 反向迭代 18 // mp.rbegin()返回指向mp尾部的逆向迭代器,mp.rend()返回指向mp头部的逆向迭代器 19 for(it2=mp.rbegin(); it2!=mp.rend(); it2++){ 20 cout<<it2->first<<" "<<it2->second<<endl; 21 } 22 return 0; 23 }
4.find查找
1 map<string, int>mp; // 定义一个map对象 2 mp.insert(pair<string, int>("www", 1)); // 用insert插入pair 3 mp.insert(map<string, int>::value_type("aaa", 2)) ; // 用insert函数插入value_type数据 4 mp["bbb"] = 3; // 用数组方式插入 5 6 map<string,int>::iterator it; 7 it = mp.find("aaa"); // find(key):返回的是key的映射的迭代器 如果it==mp.end()代表没找到 8 cout<<it->first<<" "<<it->second<<endl;
5. clear清空,size映射个数
1 map<string, int>mp; // 定义一个map对象 2 mp.insert(pair<string, int>("www", 1)); // 用insert插入pair 3 mp.insert(map<string, int>::value_type("aaa", 2)) ; // 用insert函数插入value_type数据 4 mp["bbb"] = 3; // 用数组方式插入 5 6 int len = mp.size(); // 获取mp中的映射个数 7 cout<<len<<endl; 8 mp.clear(); // map清空 9 len = mp.size(); 10 cout<<len<<endl;
6.erase删除一个元素
1 map<string, int>iterator it; 2 it = mp.find("www"); 3 mp.erase(it); // 迭代器删除 4 int k = mp.erase("aaa"); // 关键字删除,如果删除了返回1, 否则返回0, 5 mp.erase(mp.begin(), mp.end()); // 用迭代器范围删除,这里等同于mp.clear
7. map.empty()判断其是否为空