wo wo wo
蒟蒻又来水题解了
好吧,我们今天要讲的是BFSMAP!!!
没错我又来学习stl了
MAP的定义
map是一种键值对容器,里面的数据都是成对出现的。(时间复杂度O(logn)
当然他的底面也是黑红树,是自动从小到大排序和自动去重,和set很像。
怎么理解呢?就基本上是相当于一个一下结构体。
struct map{
int n;//键
int m;//值
};
不过嘛,他的呈现方式不一样,我们可以理解为两个相对应的数组,也可以理解为一个只有两列的二维数组,不过他的键和值可以类型不同,如下图。
一点也不夸张,就是这样。
创建map
理解上没问题了,下面就简单了。
头文件
#include<map>
定义
map<int,string> m;
//定义一个为m的map
//键为int类型,值为string类型(头文件)
如果是c++11以上还可以使用以下方法赋值,否则报错
map<int,string> m={
{
1,"aa"},{
2,"bb"},{
3,"cc"}};
如果还不会调换版本可见尾页
如果想从大到小排序可以这样
map<string,int,greater<int>>;
插入
这个太简单了
直接上代码
map<int,string> m={
{
1,"aa"},{
2,"bb"},{
3,"cc"}};//定义
m[4]="dd";//插入,中括号中写的是键, =号后面是插入的新值
/*此时m为
1->aa
2->bb
3->cc
4->dd
*/
就这么简单
取值
取值可以直接m[//填键]处理,或者用at代码如下
map<int,string> m={
{
1,"aa"},{
2,"bb"},{
3,"cc"}};//定义
cout<<m.at(3);//输出cc
容量
// 查询map是否为空
bool empty();
// 查询map中键值对的数量
size_t size();
// 查询map所能包含的最大键值对数量,和系统和应用库有关。此外,这并不意味着用户一定可以存这么多,很可能还没达到就已经开辟内存失败了
size_t max_size();
迭代器
共有八个获取迭代器的函数:* begin, end, rbegin,rend* 以及对应的 * cbegin, cend, crbegin,crend*。
map<int,int>::iterator it;
map<int,int> mmap;
const map<int,int> const_mmap;
it = mmap.begin(); //iterator
mmap.cbegin(); //const_iterator
const_mmap.begin(); //const_iterator
const_mmap.cbegin(); //const_iterator
查找
查找主要是通过[]和count()函数来操作的
(1)[]
int t;//需要查找的键
cin>>t;
if(!m[t])//m[t]==0
{
cout<<"Not have this keys";//map中不存在此键
}
else//存在
{
cout<<m[t];
}
不过不推荐此方法,最好使用下一种
因为这样查找后,如果不存在此键就会自动生成这个键值对,会影响下一次查找结果。
(2)count()