STL关联容器总结

本文介绍了STL中的关联容器,包括set、map、multiset和multimap,这些容器基于红黑树实现。关联容器允许元素以键值对存在,不允许在set和map中有重复键值。红黑树是一种自平衡二叉查找树,确保了插入、删除和查找操作的高效性。此外,文章还提及了multiset和multimap允许键值重复的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、关联式容器

STL 关联容器分为 set(集合)和 map(映射表)两大类,及其衍生体 multiset 和 multimap。这些容器的底层机制均以 RB-tree(红黑树)实现。RB-tree 也是一个独立容器,但并不开放使用。

SGI STL 还提供一个不在标准规格的关联式容器 hash_table(散列表),以及以 hash_table 为底层机制而完成的 hash_set散列集合、hash_map散列映射表、hash_multiset散列多键集合、hash_multimap散列多键映射表。

关联容器,类似关联式数据库,每个元素都有一个键值key和一个实值value。关联式容器的内部结构是一个平衡二叉树,包括 AVL-tree、RB-tree、AA-tree,STl 中运用的是 RB-tree红黑树。

二、红黑树 RB-tree

1. 基本性质

  • RB-tree 是一个二叉搜索树。
  • 每个节点只能是红色或黑色(图中深色代表黑色,浅色代表红色)。
  • 根节点为黑色。
  • 红色节点的子节点必须为黑。
  • 任一节点至NULL(树的尾端)的任何路径,包含黑色节点数相同。

三、set

1. 基本性质

  • set 元素的键值就是实值,实值就是键值。
  • set 不允许两个元素有相同的键值。
  • 不可以通过 set 的迭代器改变其元素值,即 set iterator 是一种 constant iterators。
  • 当对 set 进行插入删除操作后,原有的迭代器依然有效,被删除元素的迭代器除外。

2. STL 提供一组 set / multiset 相关算法,详见算法部分笔记。

四、map

1. 基本性质

  • map 的所有元素都是 pair,同时拥有实值value和键值key。pair 的第一元素为键值,第二元素为实值。
  • map 不允许两个元素拥有相同的键值。
  • 不可以通过 map 的迭代器改变其元素的键值,可以修改元素的实值。
  • 当对 map 元素进行增加或删除操作后,原有的迭代器依然有效,被删除的元素的迭代器除外。

五、multiset、multimap

multiset 和 multimap 的特性及用法与 set 和 map 完全相同,唯一差别在于允许键值重复。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值