首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你说一说stl里面set和map怎么实现的
[问答题]
请你说一说stl里面set和map怎么实现的
添加笔记
求解答(0)
邀请回答
收藏(64)
分享
纠错
1个回答
添加回答
0
崔照旭
首先map和set都是C++的关联容器,***其底层实现都是红黑树(***RB-Tree)。
set是一种关联式容器,其特性如下:
1
set以RBTree作为底层容器
2
所得元素的只有key没有value,value就是key
3
不允许出现键值重复
4
所有的元素都会被自动排序
5
不能通过迭代器来改变set的值,因为
set的迭代器是const的
6
set不支持下标操作
multiset相对于set来说,区别就是multiset允许键值重复,在multiset中调用的是RBTree的insert_equal函数,其他的基本与set相同
map和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的。它的特性如下:
1
map以RBTree作为底层容器
2
所有元素都是键+值存在
3
不允许键重复
4
所有元素是通过键进行自动排序的
5
map的键是不能修改的,但是其键对应的值是可以修改的
multimap和map的关系就跟multiset和set的关系一样,multimap允许键的值相同,因此在插入操作的时候用到insert_equal(),除此之外,基本上与map相同。
宗上map和set是根据关键字排序来保证其有序性的,如果允许修改key的话,那么首先需要删除该键,然后调节平衡,再插入修改后的键值,调节平衡,如此一来,严重破坏了map和set的结构,导致iterator失效,不知道应该指向改变前的位置,还是指向改变后的位置。所以STL中将set的迭代器设置成const,不允许修改迭代器的值;而map的迭代器则不允许修改key值,允许修改value值。
发表于 2021-08-27 15:31:16
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
上传者:
小小
难度:
1条回答
64收藏
659浏览
热门推荐
相关试题
请画出在包含 14 个结点的二项堆...
高级算法
评论
(1)
如图 1 表示使用快表(页表)的虚...
编程基础
评论
(1)
对于我们来说,谁是好的顾客?
销售常识
评论
(1)
小红书用户在不同使用场景下,对内容...
需求分析
评论
(1)
订单表order_table全部记...
查找
数据库
数据分析
SQL
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题