文章目录
一、容器概览
在C++标准模板库(STL)中,map
和multimap
是两种重要的关联容器,它们基于红黑树实现,具有自动排序特性。这对容器适合需要快速查找和有序数据管理的场景。
核心特性对比
特性 | map | multimap |
---|---|---|
键唯一性 | 唯一 | 允许重复 |
插入效率 | O(log n) | O(log n) |
查找效率 | O(log n) | O(log n) |
迭代器稳定性 | 稳定 | 稳定 |
头文件 | <map> | <map> |
二、底层实现原理
两种容器均采用红黑树(自平衡二叉查找树)实现,保证:
-
插入/删除/查找时间复杂度O(log n)
-
元素自动按键排序
-
迭代遍历时有序输出
// 红黑树节点基本结构示意
struct RB_Node {
bool color;
Key key;
Value value;
RB_Node* left;
RB_Node* right;
RB_Node* parent;
};
三、核心操作详解
1. 容器初始化
// 默认构造
map<string, int> wordCount;
// 范围构造
pair<const int, string> arr[] = {
{
1, "Apple"}, {
2, "Banana"}};
multimap<int, string> myMultiMap(begin(arr), end(arr));
// 自定义比较函数
struct CaseInsensitiveCompare {
bool operator()(const string& a, const string& b) const {
return lexicographical_compare(
a.begin(), a.end(), b.begin(), b.end(),
[](char c1, char c2) {