首页
题库
面试
求职
学习
竞赛
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收藏
689浏览
热门推荐
相关试题
以下 C 代码的运行结果是什么()
微软
C++
C语言
评论
(1)
C++ 中,下面属于关联容器的有()
C++
评论
(1)
来自
2024年秋招-蚂蚁集团...
把下面的六个图形分为两类,使每一类...
图形推理
评论
(2)
从所给的四个选项中,选择最合适的一...
图形推理
评论
(1)
对于以下使用元类(Metaclas...
Python
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题