map用法——#include <map>
现实中的数据很多是关联的,例如书本名称和价格,每条数据都含有两部分:
信息学竞赛一本通 :¥80
高等数学 :¥27.5
生物信息分析 :¥35.5
我们可以使用map存储这类一对一的数据:
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);
另外需要注意的是,使用 map 容器存储的各个键-值对,键的值既不能重复也不能被修改。换句话说,map 容器中存储的各个键值对不仅键的值独一无二,键的类型也会用 const 修饰,这意味着只要键值对被存储到 map 容器中,其键的值将不能再做任何修改。
map<int,string> list1;
支持双向访问,不支持随机访问,执行一次++和--的时间复杂度为O(logn).
第一个参数是键的类型,第二个是值的类型。
输出:
//可以用过迭代器与first,second访问元素
map_1.begin()->first; //结果为容器的第一个元素的key值
map_1.begin()->second; //结果为容器的第一个元素的value值
map<string,int> a;
for(map<string,int>::iterator it =a.begin();it!=a.end();it++ ){
cout<<it->first<<"\t"<<it->second<<endl;
}
或者通过[]直接操作键映射的值,也可以通过赋值操作改变键映射的值。
a[key]=val
//统计单词串出现的次数
map<string,int>mp;
string word;
for(int i=0;i<n;i++){
cin>>s;
mp[s]++;
}
cout<<"输出单词个数:"<<endl;
cin>>s;
cout<<mp[s]<<endl;
如果查找的key不存在,执行h[key]后会自动增加一组值,并返回0,进行多次查找后会增加很多无用的值,可以先查询key是否存在
if(mp.find(s)!=mp.end()){
cout<<mp[s]<<endl;
}else{
cout<<"没有查询到该单词"<<endl;
}
其他方法:
插入:
//向 map 容器添加新键值对
map<string,string> mymap;
mymap["Python教程"] = "python";
mymap.insert({"JAVA教程","java"});
//修改 map 容器已存储键值对中,指定键对应的值
mymap["JAVA教程"] = "JAVA ABC";
删除元素
删除元素可以使用erase函数
mymap.erase("JAVA教程"); //括号内为key值,也就是左值
查找:
查找元素
可以直接通过key值查找,如果要通过value值找ksy的话需要借助find函数
map<string,int> map_1;
map_1.clear(); //清除所有元素
map_1.empty(); //如果为空返回1,负责返回0
map_1.size(); //返回容器的元素个数
map_1.max_size; //返回容器可以容纳的最大元素
评论区