当前位置: 首页 > 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)可能更适合。

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

相关文章:

  • 本地部署Firecrawl+Dify调用踩坑记录
  • MySQL 8.0 OCP 1Z0-908 101-110题
  • C++delete详解剖析
  • 【测试】测试分类
  • 5月15日星期四今日早报简报微语报早读
  • 视频分辨率增强与自动补帧
  • 【.net core】.net core 6.0添加WCF服务引用
  • 沐渥氮气柜氧含量控制核心目标
  • RHCA笔记
  • pgsql14自动创建表分区
  • sqli-labs靶场第七关——文件导出注入
  • python 如何遍历 postgresql 所有的用户表 ?
  • PostgreSQL 联合索引生效条件
  • 每日Prompt:磨砂玻璃后的虚实对比剪影
  • 如何在WooCommerce中设置Stripe
  • 【匹配】Needleman–Wunsch
  • 【yolo】如何在 YOLOv8 中添加负样本以减少误检
  • Springboot3自定义starter笔记
  • MarkitDown:AI时代的文档转换利器
  • 四维时空数据安全传输新框架:压缩感知与几何驱动跳频
  • 跨越三十年友情,61岁余隆和60岁齐默尔曼在上海再度合作
  • “16+8”“生酮饮食”,网红减肥法究竟靠谱吗?
  • 娃哈哈:自4月起已终止与今麦郎的委托代工关系,未来将坚持自有生产模式
  • “80后”北京市东城区副区长王智勇获公示拟任区委常委
  • 落实中美经贸高层会谈重要共识,中方调整对美加征关税措施
  • 王毅谈中拉论坛十年成果