点击👉STL超全总结👈跳转主目录
1. map介绍
映射类似于函数的对应关系,每个x对应一个y,而map是每个键对应一个值。会python的朋友学习后就会知道这和python的字典非常类似。 比如说:学习 对应 看书,学习 是键,看书 是值。 学习->看书 玩耍 对应 打游戏,玩耍 是键,打游戏 是值。 玩耍->打游戏
#include<map>
map<string,string>mp;
map<string,int>mp;
map<int,node>mp;
map特性:map会按照键的顺序从小到大自动排序
2. 函数方法
代码 | 含义 |
---|
mp.find(key) | 返回键为key的映射的迭代器 O(logN) 注意:用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器, | mp.erase(it) | 删除迭代器对应的键和值O(1) | mp.erase(key) | 根据映射的键删除键和值 O(logN) | mp.erase(first,last) | 删除左闭右开区间迭代器对应的键和值 O(last-first) | mp.size() | 返回映射的对数 O(1) | mp.clear() | 清空map中的所有元素 O(N) | mp.insert() | 插入元素,插入时要构造键值对 | mp.empty() | 如果map为空,返回true,否则返回false | mp.begin() | 返回指向map第一个元素的迭代器(地址) | mp.end() | 返回指向map尾部的迭代器(最后一个元素的下一个地址) | mp.rbegin() | 返回指向map最后一个元素的迭代器(地址) | mp.rend() | 返回指向map第一个元素的迭代器(地址) |
注意:
- mp.begin()和mp.end()用法:
用于正向遍历map
map<int,int>mp;
mp[1] = 2;
mp[2] = 3;
mp[3] = 4;
auto it = mp.begin();
while(it!=mp.end())
{
cout<<it->first << " "<<it->second<<"\n";
it ++;
}
结果:
1 2
2 3
3 4
- mp.rbegin()和mp.rend()
用于逆向遍历map
map<int,int>mp;
mp[1] = 2;
mp[2] = 3;
mp[3] = 4;
auto it = mp.rbegin();
while(it!=mp.rend())
{
cout<<it->first << " "<<it->second<<"\n";
it ++;
}
结果:
3 4
2 3
1 2
3. 添加元素
map<string,string>mp;
mp["学习"] = "看书";
mp["玩耍"] = "打游戏";
mp.insert(make_pair("vegetable","蔬菜"));
mp.insert(pair<string,string>("fruit","水果"));
mp.insert({"hahaha","wawawa"});
4. 访问元素
6.4.1.下标访问:(大部分情况用于访问单个元素)
mp["菜哇菜"] = "强哇强";
cout<<mp["菜哇菜"]<<"\n";
6.4.2.遍历访问:
map<string,string>::iterator it;
for(it=mp.begin();it!=mp.end();it++)
{
cout<<it->first<<" "<<it->second<<"\n";
}
for(auto i:mp)
cout<<i.first<<" "<<i.second<<endl;
map<char,int>::iterator it = mp.find('a');
cout<<it -> first <<" "<< it->second<<"\n";
for(auto [x,y] : mp)
cout<<x<<" "<<y<<"\n";
还有两种映射:
multimap 键可以重复,即一个键对应多个值,如要了解,可以自行搜索。 unordered_map 不排序,只映射,速度更快,方法基本一样
如要了解,可查看相关博客
往期优质文章推荐
|