C++ STL 容器之map

发布时间 2023-09-20 16:43:15作者: swsyya

一、map简介

  1. 可以将任何基本类型映射到任何基本类型。如int array[100]事实上就是定义了一个int型到int型的映射。
  2. map提供一对一的数据处理,key-value键值对,其类型可以自己定义,第一个称为关键字,第二个为关键字的值
  3. 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的映射的迭代器 
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()判断其是否为空