首页
题库
面试
求职
学习
竞赛
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收藏
781浏览
热门推荐
相关试题
Choose the best w...
英语语法
评论
(1)
假如张三使用机器制造一个螺丝帽直径...
机器学习
评论
(1)
小刘去服装店购买了一批衣服,他先给...
数学运算
评论
(3)
在一个 Spring Boot 应...
Spring
评论
(1)
关于iOS中的WKWebView,...
iOS
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题