侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【C++ 基础语法】【STL】Map的基本用法

Allen Best
2023-08-06 / 0 评论 / 3 点赞 / 145 阅读 / 1,519 字
温馨提示:
本文最后更新于 2023-08-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
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;               //返回容器可以容纳的最大元素

0

评论区