Unverified Commit a8a491ec authored by Shuhao Zhang's avatar Shuhao Zhang Committed by GitHub
Browse files

🔀Merge pull request #1777 from StudyingFather/master

add multimap
parents 004f1251 282c8c7e
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -129,3 +129,25 @@ mp.erase(it)
-    `empty` 如果 `map` 为空则返回 `true` ,例如 `mp.empty()`

##  `multimap` 

`map` 类似, `multimap` 是有序键值对容器,但允许多个元素拥有同一键。其搜索、插入操作拥有对数复杂度。删除单个元素在最坏情况下具有对数复杂度,均摊为常数复杂度。

!!! warning
    正是因为 multimap 允许多个元素拥有同一键的特点,multimap 并没有提供给出键访问其对应值的方法。

### 插入与删除操作

-   通过向 `multimap` 中插入一个类型为 `pair<Key, T>` 的值可以达到插入元素的目的,例如 `mp.insert(pair<string,int>("Alan",100));`
-    `erase(x)` : 删除键为 x 的 **所有** 元素,返回删除元素的个数。
-    `erase(pos)` : 删除迭代器为 pos 的元素,要求迭代器必须合法。
-    `erase(first,last)` : 删除迭代器在 $[first,last)$ 范围内的所有元素。
-    `clear()` : 清空容器。

### 查找操作

-    `count(x)` : 返回容器内键为 x 的元素数量。复杂度为 $O(\log(size)+ans)$ (关于容器大小对数复杂度,加上匹配个数)。
-    `find(x)` : 若容器内存在键为 x 的元素,会返回该元素的迭代器(如果有多个键为 x 的元素会返回任意一个);否则返回 `end()`
-    `lower_bound(x)` : 返回指向首个不小于给定键的元素的迭代器。
-    `upper_bound(x)` : 返回指向首个大于给定键的元素的迭代器。若容器内所有元素均小于或等于给定键,返回 `end()`
-    `empty()` : 返回容器是否为空。
-    `size()` : 返回容器内元素个数。