容器 map 和 set 的底层实现基于红黑树。本文将详解如何通过红黑树封装实现这两个容器。
1. map/set 的设计原理
map 是 key/value 类型,set 是 key 类型。若分别维护两棵树,代码复用率极低且维护成本高。源码思路是利用仿函数提取 key,用一颗红黑树统一实现 map 和 set。C++ 仿函数相比 C 语言函数指针更为便捷。

接下来在红黑树基础上封装 map 和 set。
2. map 和 set 的实现细节
2.1 基本框架与结构适配
map 是 key、value 结构,set 是 key 结构。为了通用化,参数 T 根据需求可选择 pair<K,V> 或 K。编写仿函数控制底层获取 Key 的行为。

上层传仿函数,下层需新增模板参数接收。



2.2 插入操作
Insert 传入 data,data 类型可能是 pair<K,V> 或 Key。创建仿函数对象去获取它的 Key 进行比较。

Insert 后续涉及获取 Key 比较大小,使用仿函数形成回调。
































