2021-12-1 map 、multimap 深度探索

在这里插入图片描述
在这里插入图片描述
set 不允许用户更改key,是通过将 key 的迭代器设置为 const,map 不允许用户更改 key ,是在构建底层的实现的时候将 key 设置为 const 。

在这里插入图片描述
功能一致,都是将容器的第一个返回。

在这里插入图片描述
multimap 不能通过 [ ] 号来进行增加。

在这里插入图片描述
map 具有下标访问函数,存在对应的 key ,就直接返回 value,如果不存在对用的 key ,就创建一个,若没有 value ,就使用 default value。

校招相关问题的补充:
1、set 和 map 是怎么实现的?红黑树是怎么能够同时实现这两种容器的?为什么使用红黑树?

1)它们的底层结构都是通过红黑树实现,插入和删除的时间复杂度都是 O(logn),实现了高效的删除和插入。

2)在定义的参数模板中,如果只有 key 那它是 set,如果是 key 和 T 那它是map ,底层都由红黑树实现。实现 set 的节点是数据类型是 value ,实现 map 的节点的数据类型是 key + value 。

3)set 和 map 要求自动排序,红黑树能够实现这一功能。

2、map 的插入方式有哪几种?

1)使用 insert 插入 pair;

//map.insert(pair<1,"hello">);
map.insert(pair<int,string>(1,"hello");

2)在 insert 函数中使用 make_pair 函数 ;

map.insert(make_pair(1,"hello"));

3)使用 insert 函数加入 value_type 数据;

map.insert(map<int,string>::value_type(1,"hello"));

4)使用类似数组的方式插入数据。

map[1] = "hello";

3、map 中 [ ] 与 find 的区别是?

1)[ ] 的作用是,将 [ ] 当中的 key 作为关键字去查找相对应的值,如果要查找的值存在,就返回值;如果要查找的值不存在,就将用于查找的关键字和默认值作为节点插入 map 当中。

2)用关键码进行查找,找到了返回该位置的迭代器,如果没有找到就返回尾部迭代器。

4、STL 当中 map 的实现?
1)map 的特性:
依据键值自动进行排序,
其所有的元素都是 pair 并且分为 key 和 value 两个部分,
不允许元素具有相同的 key;

2)map 当中的 key 不可以更改,value 可以更改,故使用的不是 constant iterator 而是使用 constant key;

3)标准 STL 当中的 map 使用 RB_tree 来实现,另一种以 hash_table 来实现的叫做hash_map;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值