游戏中的展销系统使用的数据结构
1️⃣ std::map
底层结构:红黑树(有序平衡二叉搜索树)。
键值特点:键 有序(默认用
<
比较)。查找/插入/删除:
O(log n)
。迭代顺序:按键升序遍历。
适合场景:需要按顺序遍历、按区间查找、或经常做
lower_bound
、upper_bound
的情况。
2️⃣ std::unordered_map
底层结构:哈希表(hash table)。
键值特点:键 无序(存储顺序不可预测)。
查找/插入/删除:平均
O(1)
,最坏O(n)
(当哈希冲突严重时)。迭代顺序:不可保证顺序,且随着 rehash 改变。
适合场景:不关心顺序、只追求快速查找的情况。
3️⃣ std::multimap
底层结构:红黑树(与
map
相同)。键值特点:允许相同键(
map
的 key 必须唯一,multimap
可以重复)。查找/插入/删除:
O(log n)
。迭代顺序:按键升序遍历(同
map
)。适合场景:需要一个键对应多个值时。
🔎 主要区别总结表
容器 | 底层结构 | 是否有序 | 是否允许重复键 | 查找/插入/删除复杂度 | 迭代顺序 | 适用场景 |
---|---|---|---|---|---|---|
map | 红黑树 | 有序 | 否 | O(log n) | 按键升序 | 需要排序或区间查找 |
unordered_map | 哈希表 | 无序 | 否 | 平均 O(1) | 不保证 | 高速查找 |
multimap | 红黑树 | 有序 | 是 | O(log n) | 按键升序 | 一个键多值 |
应用例子
1、unordered_map做订单容器
2、multimap做时间等索引