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

set, multiset ,unordered_set; map, multimap, unordered_map

在 C++标准库中,std::setstd::multisetstd::mapstd::multimap是基于平衡二叉搜索树(通常是红黑树)实现的,而std::unordered_setstd::unordered_map是基于哈希表实现的。以下是它们的具体实现和特点:

1.基于平衡二叉搜索树的容器
这些容器内部使用平衡二叉搜索树(通常是红黑树)来存储元素,因此它们的查找、插入和删除操作的时间复杂度都是O(log n)。

1.1std::set

• 存储唯一元素:容器中的每个元素都是唯一的,不允许重复。

• 有序存储:元素按照升序(或自定义顺序)存储。

• 基于红黑树:内部使用红黑树实现。

1.2std::multiset

• 存储可重复元素:容器中的元素可以重复。

• 有序存储:元素按照升序(或自定义顺序)存储。

• 基于红黑树:内部使用红黑树实现。

1.3std::map

• 存储键值对:每个键都对应一个值,键是唯一的。

• 有序存储:键值对按照键的升序(或自定义顺序)存储。

• 基于红黑树:内部使用红黑树实现。

1.4std::multimap

• 存储键值对:每个键可以对应多个值。

• 有序存储:键值对按照键的升序(或自定义顺序)存储。

• 基于红黑树:内部使用红黑树实现。

2.基于哈希表的容器
这些容器内部使用哈希表来存储元素,因此它们的查找、插入和删除操作的平均时间复杂度是O(1),但在最坏情况下(如大量冲突)可能会退化到O(n)。

2.1std::unordered_set

• 存储唯一元素:容器中的每个元素都是唯一的,不允许重复。

• 无序存储:元素的存储顺序是不确定的。

• 基于哈希表:内部使用哈希表实现。

2.2std::unordered_map

• 存储键值对:每个键都对应一个值,键是唯一的。

• 无序存储:键值对的存储顺序是不确定的。

• 基于哈希表:内部使用哈希表实现。

3.总结

std::setstd::multisetstd::mapstd::multimap:基于平衡二叉搜索树(通常是红黑树)实现,查找、插入和删除操作的时间复杂度是O(log n),元素有序存储。

std::unordered_setstd::unordered_map:基于哈希表实现,查找、插入和删除操作的平均时间复杂度是O(1),元素无序存储。

4.选择合适的容器
选择哪种容器取决于你的具体需求:

• 如果你需要有序存储或者频繁地进行范围查询,那么基于红黑树的容器(如std::setstd::map)可能更适合。

• 如果你需要高效的查找、插入和删除操作,并且不关心元素的顺序,那么基于哈希表的容器(如std::unordered_setstd::unordered_map)可能更适合。

希望这个解释能帮助你更好地理解这些容器的区别!如果有任何问题,欢迎随时问我哦。

http://www.xdnf.cn/news/462673.html

相关文章:

  • 【向量维度如何选择?】
  • 深入探索向量数据库:构建智能应用的新基础
  • linux dbus
  • print()函数详解:输出文字、变量与格式化
  • Windows 安装 Redis 的几种方式
  • 设计模式(基于Python3)
  • Python课程及开源项目推荐
  • 宣纸阁项目测试报告
  • 流程编辑器Bpmn与LogicFlow学习
  • 2025长三角数学建模C题完整思路
  • Python多线程
  • 计算机网络:什么是电磁波以及有什么危害?
  • 谷歌量子计算机:开启计算新纪元
  • C# 活动窗体截图:基于 Win32 API 的实现
  • 有效的括号
  • 【蓝桥杯省赛真题49】python偶数 第十五届蓝桥杯青少组Python编程省赛真题解析
  • ROS--NAVI DWA
  • 【c语言】动态内存分配
  • MySQL 迁移至 Doris 最佳实践方案
  • 低功耗实现方法思路总结
  • 策略模式-枚举实现
  • 如何判断一个网站后端是用什么语言写的
  • 7.Pyecharts:全局配置项1
  • Python 翻译词典小程序
  • 平替BioLegend品牌-Elabscience FITC Anti-Mouse CD8a抗体(53-6.7)精准标记T细胞表面抗原
  • 断点续传使用场景,完整前后端实现示例,包括上传,下载,验证
  • 麒麟系统ARM64架构部署mysql、jdk和java项目
  • 牛客网刷题:NC208813求逆序数
  • 【PX4飞控】在 Matlab Simulink 中使用 Mavlink 协议与 PX4 飞行器进行交互
  • python处理异常,JSON