STL map 和 multimap 是关联式容器中的核心成员,底层基于红黑树实现。与 set 不同,它们存储的是键值对(pair),支持通过 key 快速映射到 value。
map 类基础
map 的模板声明如下:
template <class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>,// map::key_compare
class Alloc = allocator<pair<const Key,T>>> // map::allocator_type
class map;
关键参数:
Key:键类型,必须唯一。T:映射值的类型。Compare:比较仿函数,默认按 key 升序排列。Alloc:空间配置器。
底层特性:
- 结构:平衡二叉搜索树(红黑树)。
- 复杂度:增删查改均为 O(logN)。
- 遍历:中序遍历,key 有序。
- 限制:支持修改 value,严禁修改 key(会破坏树结构)。
pair 类型详解
map 节点实际存储的是 pair<const Key, T>。pair 将两个数据组合成一个单元:
template<class T1, class T2>
struct pair {
typedef T1 first_type;
typedef T2 second_type;
T1 first; // key
T2 second; // value
pair() : first(T1()), second(T2()) {}
pair(const T1& a, const T2& b) : (a), (b) {}
};


