码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ - unordered系列关联式容器介绍 - 和 set map 的比较


     前言

     C++ - map 和 set 使用介绍_chihiro1122的博客-CSDN博客

    C++ - map 和 set的 例题_chihiro1122的博客-CSDN博客

    C++ - map 和 set 的模拟实现上篇 - 红黑树当中的仿函数 - 红黑树的迭代器实现-CSDN博客、

    C++ - set 和 map 的实现(下篇)- set 和 map 的迭代器实现_chihiro1122的博客-CSDN博客

    unordered_map容器 和 unordered_set 容器

    这里的两个容器和之前的 map 和 set 是不一样的两个容器。之前两个容器的底层是使用 红黑数实现的,迭代器也是使用的红黑树的迭代器。而 unordered_map容器 和 unordered_set 容器 的底层是哈希表,这两对之间的底层实现是完全不一样的。

     但是两者之间使用的 方式基本是一样的:

     大概功能函数:

    map:

    set:

     唯二和 set 和 map 不同的,多出了 哈希桶当中的功能函数;还有,unordered 当中的迭代器不是双向迭代器,而 map 和 set 当中是双向迭代器。

    因为 unordered_map 和 unordered_set 的底层都是 哈希表实现的,所以当我们顺序输出这个 容器当中的内容的时候,不是有序的,但是去重的效果还是可以实现。因为 哈希表是 高效的查找,但是其中元素的排列并不是完全有序的,按照一定规律排列在 其中,如下使用例子:

    1. unordered_set<int> s;
    2. s.insert(3);
    3. s.insert(10);
    4. s.insert(50);
    5. s.insert(43);
    6. s.insert(22);
    7. unordered_set<int>::iterator it = s.begin();
    8. for (auto e : s)
    9. {
    10. cout << *it << endl;
    11. ++it;
    12. }

    输出:

    1. 43
    2. 3
    3. 50
    4. 10
    5. 22

     当然,两个容器也都有没有去重效果的 multi 版本:

     当然,unordered_map 的使用和 map 也差不多,具体可以参考 map 和 set 的博客:

    C++ - map 和 set 使用介绍_chihiro1122的博客-CSDN博客

     unordered_map 和 unordered_set 在find()函数(查找)上,和 map 和 set 的查找两对的效率还是差不多的,基本一致,

    但是 unordered_map 和 unordered_set 在insert()插入 和 erase()删除结点的效率上,如果是插入的数据重复数据较多,两者的效率要比 map 和 set 高出几倍;

    如果是插入的数据少,和很少有重复的情况下,两对的插入效率差不多(但是如果插入的数据量太大,unordered_map 和 unordered_set 两个容器反而没有占到便宜,要比 map 和 set 效率低),但是删除效率还是 unordered_map 和 unordered_set 要 明显优于 map 和 set。

    如果是有序的数据,那么 unordered_map 和 unordered_set 除了在 查找上和 map set 一样,但是在 插入和删除上的效率就要比 上述两种情况的效率要更低了,unordered_map 和 unordered_set 在这种情况之下逃不了多少好处。

    所以,我们看到,两种方式实现的 map 和 set都在各自的适应的情况下有着不低于对方的效率,我们要看当前场景来选择适用于当前场景的 这 四种容器。

     

  • 相关阅读:
    数据结构与算法基础(1)-- 绪论 (上)
    MXNet对NIN网络中的网络的实现
    基于卷积神经网络ResUnet 多模态融合实验、BraTS 3d数据集(nii.gz)4模态融合分割
    Spring Boot 2.6.0正式发布:默认禁止循环依赖、增强Docker镜像构建...
    非对称加密
    PDF标准详解(一)——PDF文档结构
    材料工程基础-重点
    后端接口对接注意事项
    easyphoto 妙鸭相机
    Android入门第39天-系统设置Configuration类
  • 原文地址:https://blog.csdn.net/chihiro1122/article/details/133358527
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号