【C++】从红黑树到 map 和 set:封装设计与迭代器实现C++ 标准库中的 std::map 和 std::set 底层均基于红黑树实现,但两者存储的数据类型不同:set 仅存储关键字 key,而 map 存储键值对 pair<const Key, T>。在 SGI-STL 源码中,map 和 set 并没有各自独立实现一棵红黑树,而是通过复用同一棵红黑树模板,利用模板参数和仿函数来区分两种不同的语义。这种设计体现了泛型编程的精妙:用一份红黑树代码同时支持 key 模型和 key/value 模型。