C++ 关联式容器核心解析
在此之前,我们接触的顺序表、链表、栈和队列等统称为序列式容器,底层是线性结构。而关联式容器则根据应用场景不同,主要分为树型结构和哈希结构。本文聚焦于基于平衡搜索树(红黑树)实现的四种关联式容器:set、multiset、map、multimap。
它们的核心优势在于存储 <key, value> 结构的键值对,检索效率远高于线性遍历的序列式容器。其中 key 用于标识元素,value 存储对应信息。
SGI-STL 中的 pair 定义
template <class T1, class T2>
struct pair {
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair() : first(T1()), second(T2()) {}
pair(const T1& a, const T2& b) : first(a), second(b) {}
};
注意: pair 重载了大小比较运算符,比较时会先比 first,若相同再比 second。
1. set 容器

set 的主要特征如下:
- 有序存储:元素按特定次序存储,默认使用小于号比较。
- 唯一性:每个
value必须是唯一的,且value即key。元素不可修改,但可插入或删除。 - 底层实现:二叉搜索树(红黑树)。
- 迭代顺序:遍历时可获得有序序列。
- 查找效率:时间复杂度为 O(log₂N)。
关键点: 虽然 set 只放 value,但底层实际存放的是 <value, value> 构成的键值对。插入时只需传入 value 即可。





