C++ map 与 multimap 使用指南
概述
map 和 multimap 是 C++ STL 中常用的关联容器,底层基于红黑树实现。它们支持高效的查找、插入和删除操作,时间复杂度通常为 O(logN)。与 set 不同,map 存储的是键值对(Key-Value),适用于需要建立映射关系的场景。
核心概念
1. 基本结构
map 的声明如下,其中 Key 是关键字类型,T 是映射值类型。默认情况下,Key 必须支持小于比较运算符,否则需要自定义仿函数。
template < class Key,
class T,
class Compare = less<Key>,
class Alloc = allocator<pair<const Key, T> > >
class map;
底层节点存储的数据类型为 pair<const Key, T>。这意味着 key 是不可修改的,而 value 可以修改。如果修改了 key,会破坏红黑树的有序性,因此标准库禁止直接修改 key。
2. Pair 类型
map 内部使用 pair 来组织数据。pair 包含两个成员:first (key) 和 second (value)。
// 构造 pair
auto p = std::make_pair("key", 10);
// 访问
p.first; // "key"
p.second; // 10
常用操作详解
1. 插入操作
C++98 风格
通过构造 pair 对象插入。
std::map<std::string, int> dict;
dict.insert(std::make_pair("apple", 1));
C++11 风格
使用初始化列表或 emplace,更加简洁。
// 初始化列表
std::map<std::string, int> dict = {{"apple", 1}, {"banana", 2}};
ret = dict.({, });
(ret.second) {
}


