map 和 multimap 是 C++ STL 中基于红黑树实现的关联式容器,支持 O(logN) 的增删查改操作。与 set 不同,它们存储的是键值对 pair,通过 key 快速映射到 value。
map 类介绍
map 的底层结构是平衡二叉搜索树(红黑树),key 具有唯一性且自动有序。模板参数包括 Key、T(value 类型)、Compare(默认 less)和 Alloc。迭代器遍历时按 key 升序访问。注意:map 支持修改 value,但不支持修改 key,否则破坏树结构。
template<class Key, class T, class Compare = less<Key>, class Alloc = allocator<pair<const Key, T>>>
class map;
pair 类型基础
map 节点实际存储 pair<const Key, T>。pair 将两个数据组合成一个单元,first 对应 key(const),second 对应 value。推荐使用 make_pair 或初始化列表创建。
// 推荐方式
auto p = make_pair("key", "value");
// 或 C++11 初始化列表
map<string, int> m = {{"a", 1}};
构造与迭代器
map 支持多种构造方式,最常用的是初始化列表。迭代器为双向迭代器,支持 ++/--,遍历顺序为中序(key 升序)。
// 构造
map<string, string> dict = {{"left", "左边"}, {"right", "右边"}};
// 遍历
for (auto it = dict.begin(); it != dict.end(); ++it) {
cout << it->first << ":" << it->second << endl;
}
// 范围 for 更简洁
for (const auto& e : dict) {
cout << e.first << ":" << e.second << endl;
}


