手撕 STL:一棵红黑树,凭什么同时撑起 set 和 map?摘要:学红黑树时几乎人人都有个疑问——std::set 存 key,std::map 存 pair<key, value>,存的东西根本不一样,为什么它们底层是同一棵红黑树?本文先从 SGI STL 源码切入,看 STL 官方是怎么设计的,再用一份可编译的 C++ 代码复刻它:讲透模板参数 K/V、KeyOfT 仿函数、以及迭代器 operator++ 的中序后继。读完你能自己写出一个"能当 set、能当 map、能迭代器遍历"的红黑树封装。