map的学习

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()

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值