当前位置: 首页 > news >正文

【C/C++】C++11 无序关联容器的诞生背景

文章目录

    • 背景
    • 无序关联容器适用场景
    • 有序关联容器适用场景

背景

C++11 引入了无序关联容器(unordered_mapunordered_setunordered_multimapunordered_multiset)是为了提供一种高效的元素存储和查找方式。相比于有序关联容器(mapsetmultimapmultiset),无序关联容器的元素是无序存储的,但是插入、查找和删除操作的平均时间复杂度为 O(1),比有序关联容器更加高效。

无序关联容器的实现方式是基于哈希表的,它们使用哈希函数将元素的键映射到哈希表中的位置,因此可以快速地进行元素的查找、插入和删除操作。而有序关联容器则是基于红黑树实现的,它们的元素是按照键值有序存储的,因此可以进行范围查找和排序等操作。

因此,无序关联容器适用于需要高效地进行元素的查找、插入和删除操作的场景,而有序关联容器则适用于需要有序存储元素的场景。C++11 引入无序关联容器,是为了提供更加灵活和高效的元素存储和查找方式,以满足不同场景下的需求。

无序关联容器适用场景

无序关联容器(unordered_mapunordered_setunordered_multimapunordered_multiset)适用于需要高效地进行元素的查找、插入和删除操作的场景。由于无序关联容器的实现方式是基于哈希表的,它们使用哈希函数将元素的键映射到哈希表中的位置,因此可以快速地进行元素的查找、插入和删除操作,平均时间复杂度为 O(1)。

无序关联容器适用于以下场景:

  1. 需要高效地进行元素的查找、插入和删除操作,而不需要保证元素的顺序。

  2. 元素的键值可以使用哈希函数进行计算,且哈希函数的冲突率较低。

  3. 元素的数量较大,但是内存空间有限,需要使用哈希表来进行空间优化。

  4. 需要对元素进行快速的去重操作。

总之,无序关联容器适用于需要高效地进行元素的查找、插入和删除操作,并且不需要保证元素的顺序的场景。但是,由于哈希表的实现方式,无序关联容器的元素并不是按照它们被插入的顺序存储的,因此在需要有序存储元素的场景下,应该使用有序关联容器。

有序关联容器适用场景

有序关联容器(mapsetmultimapmultiset)适用于需要有序存储元素的场景。由于有序关联容器的实现方式是基于红黑树的,它们的元素是按照键值有序存储的,因此可以进行范围查找和排序等操作。

有序关联容器适用于以下场景:

  1. 需要对元素进行排序或者按照键值进行范围查找的场景。

  2. 元素的数量较小,但是需要进行频繁的查找和插入操作。

  3. 元素的键值不能使用哈希函数进行计算,或者哈希函数的冲突率较高。

  4. 需要保证元素的顺序。

总之,有序关联容器适用于需要有序存储元素的场景,并且需要进行排序或者按照键值进行范围查找的场景。但是,由于红黑树的实现方式,有序关联容器的插入、查找和删除操作的平均时间复杂度为 O(log n),比无序关联容器更加低效。因此,在需要高效地进行元素的查找、插入和删除操作的场景下,应该使用无序关联容器。

http://www.lryc.cn/news/61307.html

相关文章:

  • h264编码原理
  • 网络工程师经常搞混的路由策略和策略路由,两者到底有啥区别?
  • 高精度气象模拟软件WRF实践技术
  • 总结827
  • 还在发愁项目去哪找?软件测试企业级Web自动化测试实战项目
  • 总结下Spring boot异步执行逻辑的几种方式
  • 【开发日志】2023.04 ZENO----Composite----CompNormalMap
  • 春秋云境:CVE-2022-28525 (文件上传漏洞)
  • 【软件测试二】开发模型和测试模型,BUG概念篇
  • 短视频app开发:如何实现视频直播功能
  • [架构之路-174]-《软考-系统分析师》-5-数据库系统-7-数据仓库技术与数据挖掘技术
  • 销售高品质 FKM EPDM NBR 硅胶 O 形密封圈
  • Linux环境变量:不可或缺的系统组成部分
  • FFmpeg命令行解析
  • 机器学习——为什么逻辑斯特回归(logistic regression)是线性模型
  • 从输入URL到页面展示到底发生了什么
  • Qt connect传参方式及lambda函数传参方式详解
  • 如何在硬盘上恢复已经删除的照片?
  • Unity日记22(携程概念)
  • 01-Linux-磁盘分区与目录配置
  • 连接器信号完整性仿真教程 二
  • 基于深度学习的图片上色(Opencv,Pytorch,CNN)
  • Python爬虫
  • python基础案例题:进制转换、字符串加密的实现、猜拳游戏、多种方法计算π
  • Spring Boot入门与进阶
  • servlet(1)—javaEE
  • 定制 Jenkins 镜像说明
  • 【离散数学】测试五 图论
  • 根据cadence设计图学习硬件知识 day03 了解 一些芯片 和 数据手册下载的地方
  • 计算机组成原理——第五章中央处理器(中)