19.Map的常见用法详解优化-[STL模板]
1.map的定义—万能映射
一个元素
这里的typename1是键 typename2是值
map<typename1,typename1> name;
/*
map<double,int> a;
map<string,int> b;
*/
2.map元素的访问
下标访问
map<char,int> b;
b[ ’ c ’ ] = 20 通过访问字符c 映射出 整数 20 键只有一个
下标访问实例:
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<char,int> a;
a['c']=20;
a['c']=30; //30 把 20 覆盖掉了 键只有一个
cout<<a['c']<<endl;
return 0;
}
输出:30
迭代器访问
map<char,int>::iterator it;
通过:*it访问元素
迭代器访问实例:
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<char,int> a;
a['a']=20;
a['b']=30;
a['c']=90;
map<char,int>::iterator it=a.begin();//令it指向容器a的首地址
for(it;it!=a.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;
//键:it->first 值:it->second
}
return 0;
}
输出: a[ ’ X ’ ] = N X就是键 N就是值 , 键:it->first 值:it->second
而且map会自动根据键的大小从小到大排序,输出。这是由于map内部《红黑树》实现
a 20
b 30
c 90
3.map常用函数
(1)find(key)找出键为c的值
返回键为key的迭代器
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<char,int> a;
a['a']=20;
a['b']=30;
a['c']=90;
map<char,int>::iterator it=a.find('c');
cout<<it->first<<" "<<it->second;
return 0;
}
输出:c 90
(2)erase()
erase(it) 删除it元素的迭代器
可以使用a.erase(a.find(x)) 利用find()找到x 再用erase删除
erase(x)删除容器中的所有x [ 常用 ]
erase(first,last) 删除[ first,last)间的元素 左闭右开
(3)size()
a.size()获取map内映射数量
4)clear()
清空map的所有映射