unordered_set与set的区别

        unordered_set与set都是c++STL中两个重要容器,unordered_set是C++11标准的时候推出的新容器,unordered_set与set使用上几乎没有什么区别,其内部的成员函数也大差不差.

        它们的主要区别在于内部实现的数据结构不同,set的内部实现是一个红黑树的平衡二叉树,但unordered_set其内部的实现是一个哈希表,两者结构大不相同,因此它们所呈现出的插入,查找,删除效率以及元素的储存排列顺序也都有不同.

        set存储的元素是有序的,在遍历set时,里面的元素会默认按从小到大的顺序排序,且其的插入,删除和查找的时间复杂度都是对数级的,比较均匀.

其结果为: 

可见插入的顺序是不会影响set最终存储元素的顺序的.另一方面对于unordered_set来说其在一般情况下其查找效率是要高于set的,其查找和删除等的操作的世间复杂度是常数级的,但是在级少数情况下set的可能要高于unordered_set(比如冲突较多的情况下).同时unordered_set由于其内部是用哈希表实现的,所以其内部存储的元素之间是没有什么逻辑顺序,这与set刚好反过来的,在实际的应用中我们可以根据是否要求数据之间的有序性来使用set或者unordered_set.

还有一点要注意的是unordered_set在数据量较小的时候可能也会表现出一种有序性,比如:

     其结果为:

但若数据量大时哈希表进行扩充,那么其顺序就不确定了,比如:

 其结果为:

所以千万要记住unorder_set其内部元素存储是无序的(unordered这个词也是无序的意思),不要给误导了!!! 

梦邂十香
关注 关注
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c++中set和unordered_set区别
萧海的博客
12-08 6443
作用 set与unordered_set一样,都是关联式容器,和 map 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。 当使用 set 容器存储键值对时,只需要为其提供各键值对中的 value 值(也就是 key 的值)即可。 使用 set 容器存储的各个元素的值必须各不相同。 从语法上讲 set 容器并没有强制对存储元素的类型做 const 修饰,即 set 容器中存储的元素的值是可以修改的。但是,C++ 标准为了防止用户修改容器中元素的值,对所有可能会实现此
unordered_setset的比较
m0_53005929的博客
05-18 1720
unordered_setset比较
【C++深度探索】unordered_set、unordered_map封装
最新发布
Renswc的博客
08-16 2074
unordered_map和unordered_set的底层都是使用哈希表来实现的,然后在外面套了一层壳,为了能够更好的实现代码复用,我们对哈希表进行了很多修改还使用了仿函数,封装了普通迭代器和const迭代器等,最终成功对unordered_map和unordered_set实现了封装
set与unordered_set的对比
weixin_51824417的博客
09-19 1362
本博客只作为 集合是一个关联容器,其中包含一组排序的键类型的唯一对象。每个元素只能出现一次,因此不允许重复。用户可以通过以任何顺序插入元素来创建集合,集合将返回排序后的数据给用户,这意味着集合包含用于对从用户抽象的数据进行排序的定义。 可以使用set的主要原因是- 当排序的数据是必需的 当不需要重复值时,仅需要唯一数据 当我们要使用二进制搜索树而不是哈希表时。 如果有一个与搜索时间没有问题,因为它需要的log(n)的复杂性中搜索 输入- set={2,1...
C++ unordered_setset
qq_40693072的博客
04-10 3761
set和unordered_set都是C++的关联性容器,set的内部实现为红黑二叉树,unordered_set的内部实现为哈希表,二者存储的值都只能是唯一的,二者的区别是unordered_set的存储的变量没有顺序,set容器则会进行自动排序,unordered_set对插入,删除,查找操作的时间复杂度都为O(1),它运用Hash表将unordered_set中的元素存储在buckets中,buckets是hash函数内部通过插入的元素值分配的一个内存空间,便于快速查找,但是对于数据量较大的情况下ha
C++ STL中 `set` 和 `unordered_set` 简单对比
weixin_45805339的博客
08-05 432
在 C++ STL 中,set和都是用于存储唯一元素的容器,但它们在实现方式、性能和特性上有一些重要的区别
set和unordered_set区别以及适用情况
小乾的计算机学习之路
11-06 5889
何时使用set: 我们需要有序的数据。 我们将不得不打印/访问数据(按排序顺序)。 我们需要元素的前任/后继。 由于set是有序的,因此我们可以在set元素上使用binary_search(),lower_bound()和upper_bound()之类的函数。这些函数不能在unordered_set()上使用。 在以下情况下使用unordered_set 我们需要保留一组不同的元素,并且不...
初识C++之unordered_map与unordered_set
Masquerena114514的博客
04-07 2229
本文主要讲述了通过对哈希桶的改造,使得unordered_set和unordered_map能够对同一个哈希桶进行封装并模拟实现
unordered_set unordered_map的运用
Forbest1的博客
11-26 1411
unordered_set unordered_map的运用
C++ STL(八) -------- unordered_set、unordered_map的介绍+使用+比较
向未来❀去探索 的博客
09-04 1554
unordered_set、unordered_map的介绍+使用+比较
C++STL剖析(八)—— unordered_set和unordered_multiset的概念和使用
热门推荐
Edison's 小宇宙
02-14 1万+
unordered_set和unordered_multiset的介绍和使用
unordered_map和unordered_set的模拟实现
01-20
unordered_map和unordered_set的模拟实现 (一)哈希表的特性及概念 定义: 哈希表(Hash table,也叫散列表),是根据关键字值(key,value)直接进行访问的数据结构。也就是说,它通过把关键字映射到表中一个位置来...
c++ set 与 unordered_set区别
All_In_gzx_cc的博客
02-27 831
c++ std中set与unordered_set区别和map与unordered_map区别类似: set基于红黑树实现,红黑树具有自动排序的功能,因此map内部所有的数据,在任何时候,都是有序的。 unordered_set基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是消耗比较多的内存,无自动排序功能。底层实现上,使用一个下标范围比较大的数组来存储元素,形成很多的桶,利用hash函数对key进行映射到不同区域进行保存。 set使用时设置: 我们需要有序数据(不同的元素)。 我
Set和Unordered_Set区别
weixin_30568715的博客
07-29 1006
参考文献: [1] cppreference中对std::set的介绍:https://zh.cppreference.com/w/cpp/container/set [2] cppreference中对std::unordered_set的介绍:https://zh.cppreference.com/w/cpp/container/unordered_set [3] https://...
c++ set和unordered_set区别
qq_71286244的博客
07-01 1400
c++ set和unordered_set区别
unordered_set VS set
Poundssss的博客
09-26 880
在stackoverflow上看到一个问题,大概是问为什么有了平均查询O(1)的unordered_set我们还需要平均O(logN)的set呢?首先我们需要知道set在STL底层是用红黑树来实现的,而unordered_set是基于hash。在这里记录一下比较好的答案。 set uses less memory than unordered_set to store the same number
C++ set与unordered_set区别
wwxy1995的博客
02-24 842
  哈希表会破环数组有序性 set与map底层实现是平衡二分搜索树,unordered_set与unordered_map底层实现是哈希表
c++ set unordered_set区别
weixin_30826761的博客
05-06 173
c++ std中set与unordered_set区别和map与unordered_map区别类似: set基于红黑树实现,红黑树具有自动排序的功能,因此map内部所有的数据,在任何时候,都是有序的。 unordered_set基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是消耗比较多的内存,无自动排序功能。底层实现上,使用一个下标范围比较大的数组来存储元素,...
unordered_setset 区别
04-10
unordered_setset是C++标准库中的两个容器,它们都用于存储一组唯一的元素。它们的主要区别在于底层实现和性能特点。 1. 底层实现: - set是基于红黑树实现的有序容器,它可以保持元素的有序性。 - unordered_set是基于哈希表实现的无序容器,它不会保持元素的有序性。 2. 查找效率: - set的查找效率较高,时间复杂度为O(log n),因为它使用了红黑树作为底层数据结构。 - unordered_set的查找效率更高,平均情况下时间复杂度为O(1),最坏情况下为O(n),因为它使用了哈希表作为底层数据结构。 3. 插入和删除操作: - set的插入和删除操作相对较慢,时间复杂度为O(log n),因为需要维护红黑树的平衡性。 - unordered_set的插入和删除操作相对较快,平均情况下时间复杂度为O(1),最坏情况下为O(n),因为需要处理哈希冲突。 4. 元素顺序: - set中的元素按照键值自动排序,因此可以通过迭代器按照顺序访问元素。 - unordered_set中的元素没有特定的顺序,因此无法通过迭代器按照顺序访问元素。 总结一下: set适用于需要保持元素有序性的场景,而unordered_set适用于对查找操作有较高要求的场景。选择哪个容器取决于具体的需求和性能要求。
写文章

热门文章

  • unordered_set与set的区别 1267
  • 简单使用TexStudio写证明题 178
  • 哈希表常用数据结构---set 115
  • 浅谈装箱问题 96
  • 二分搜索法的详细讲解和易错点 94

最新评论

  • 二分搜索法的详细讲解和易错点

    CSDN-Ada助手: 恭喜您写了这篇题为“二分搜索法的详细讲解和易错点”的博客!阅读您的文章,我对二分搜索法有了更深入的了解。您详细解释了该算法的原理和应用,并指出了易错点,这对于初学者来说非常有帮助。 不过,我想提供一个建议,希望能帮助您进一步提升文章的质量。您可以考虑在文章中添加一些实际的应用案例,以便读者更好地理解和记忆该算法。此外,您可以进一步探讨一些可能的优化方法,这将使您的博客更加丰富和有深度。 再次感谢您的分享,期待您在未来的创作中继续取得进步! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3

  • 翻转二叉树

    CSDN-Ada助手: 恭喜你写了第10篇博客!翻转二叉树是一个很有意思的话题,你的解释也非常清晰易懂。不过我觉得你可以考虑在下一篇博客中加入一些实际应用的例子,让读者更容易理解这个概念。期待你的下一篇作品!

  • 浅谈---栈与队列

    CSDN-Ada助手: 恭喜博主能够坚持不懈地分享技术知识,这篇关于栈与队列的博客内容很有深度,对我们理解数据结构有很大帮助。不过,我觉得下一步可以考虑结合一些实际案例或者应用场景来讲解栈与队列的使用,这样更能让读者有身临其境的感觉。希望博主能够继续保持创作热情,为我们带来更多有价值的内容。

  • 哈希表常用数据结构---set

    CSDN-Ada助手: 恭喜您写了第6篇博客!标题为“哈希表常用数据结构---set”,看起来很有深度和实用性。您的博客内容一直都很有价值,感谢您不断创作并分享给大家。 在下一步的创作中,我建议您可以探索一下哈希表与其他数据结构的关系,比如与数组、链表等的结合应用,以及它们在不同场景下的性能比较和优劣势分析。这样的深入研究会进一步丰富您的博客内容,并为读者提供更多有用的信息。 期待您的下一篇博客,继续保持谦虚的态度,您的努力一定会得到更多读者的认可与支持!

  • 浅谈C++常见字符串题目

    CSDN-Ada助手: 恭喜作者写了这么有意义的一篇博客!对于C++常见字符串问题的探讨确实能帮助读者更好地理解和应用相关知识。希望作者能继续保持创作,分享更多关于C++的经验和技巧。也希望下一篇博客能够更进一步,可以介绍一些更深入的字符串问题或者与其他C++主题的结合,让读者们更全面地学习和掌握相关知识。期待作者继续努力!

最新文章

  • 翻转二叉树
  • 浅谈---栈与队列
  • 浅谈C++常见字符串题目
2023年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家西宁卡通玻璃钢雕塑多少钱驿城玻璃钢雕塑加工厂家玻璃钢景观雕塑制作保定玻璃钢雕塑售价玻璃钢雕塑教学视频玻璃钢园林雕塑信息重庆玻璃钢景观园林雕塑北京商场美陈供应商杭州商场美陈布置制作公司河北景区玻璃钢雕塑市场有机玻璃钢雕塑手绘吉林玻璃钢座椅雕塑安徽主题公园玻璃钢雕塑工厂商场美陈专员文山市玻璃钢雕塑报价百货商场美陈注意事项邯郸树脂玻璃钢雕塑四川现代人物玻璃钢雕塑东莞荆门玻璃钢卡通雕塑哈尔滨鹤壁玻璃钢雕塑常用玻璃钢雕塑摆件设计企业保山玻璃钢雕塑厂家直供丽水玻璃钢牛雕塑长沙人物玻璃钢雕塑价位重庆抽象玻璃钢雕塑价位黔东南玻璃钢雕塑厂家和田城市玻璃钢雕塑定做甘南仿真玻璃钢雕塑订做玻璃钢雕塑做黑钛工艺流程河南玻璃钢校园玻璃钢雕塑厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化