Loading docs/lang/csl/associative-container.md +56 −0 Original line number Diff line number Diff line ## `set` `set` 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。 `set` 内部通常采用红黑树实现。 和数学中的集合相似, `set` 中不会出现值相同的元素。 ### 插入与删除操作 - `insert(x)` 当容器中没有等价元素的时候,将元素 x 插入到 `set` 中。 - `erase(x)` 删除值为 x 的元素,返回删除元素的个数。 - `erase(pos)` 删除迭代器为 pos 的元素,要求迭代器必须合法。 - `erase(first,last)` 删除迭代器在 $[first,last)$ 范围内的所有元素。 - `clear()` 清空 `set` 。 ### 迭代器 `set` 提供了以下几种迭代器: 1. `begin()/cbegin()` 返回指向首元素的迭代器,其中 `*begin = front` 。 2. `end()/cend()` 返回指向数组尾端占位符的迭代器,注意是没有元素的。 3. `rbegin()/rcbegin()` 返回指向逆向数组的首元素的逆向迭代器,可以理解为正向容器的末元素。 4. `rend()/rcend()` 返回指向逆向数组末元素后一位置的迭代器,对应容器首的前一个位置,没有元素。 以上列出的迭代器中,含有字符 `c` 的为只读迭代器,你不能通过只读迭代器去修改 `set` 中的元素的值。如果一个 `set` 本身就是只读的,那么它的一般迭代器和只读迭代器完全等价。只读迭代器自 C++11 开始支持。 ### 查找操作 - `count(x)` 返回 `set` 内键为 x 的元素数量。 - `find(x)` 在 `set` 内存在键为 x 的元素时会返回该元素的迭代器,否则返回 `end()` 。 - `lower_bound(x)` 返回指向首个不小于给定键的元素的迭代器。 - `upper_bound(x)` 返回指向首个大于给定键的元素的迭代器。 - `empty()` 返回容器是否为空。 - `size()` 返回容器内元素个数。 ## `multiset` `multiset` 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。 与 `set` 不同的是, `multiset` 允许不同元素间拥有相同的值。 ### 插入与删除操作 - `insert(x)` 将元素 x 插入到 `multiset` 中。 - `erase(x)` 删除值为 x 的 **所有** 元素,返回删除元素的个数。 - `erase(pos)` 删除迭代器为 pos 的元素,要求迭代器必须合法。 - `erase(first,last)` 删除迭代器在 $[first,last)$ 范围内的所有元素。 - `clear()` 清空 `multiset` 。 ### 迭代器 `multiset` 的迭代器和 `set` 的 [迭代器](#_2) 类似,这里不再赘述。 ### 查找操作 `multiset` 的查找操作和 `set` 的 [查找操作](#_3) 类似,这里不再赘述。 ## `map` `map` 是有序键值对(Attribute–value pair)容器,它的元素的键是唯一的。搜索、移除和插入操作拥有对数复杂度。 `map` 通常实现为红黑树。 Loading Loading
docs/lang/csl/associative-container.md +56 −0 Original line number Diff line number Diff line ## `set` `set` 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。 `set` 内部通常采用红黑树实现。 和数学中的集合相似, `set` 中不会出现值相同的元素。 ### 插入与删除操作 - `insert(x)` 当容器中没有等价元素的时候,将元素 x 插入到 `set` 中。 - `erase(x)` 删除值为 x 的元素,返回删除元素的个数。 - `erase(pos)` 删除迭代器为 pos 的元素,要求迭代器必须合法。 - `erase(first,last)` 删除迭代器在 $[first,last)$ 范围内的所有元素。 - `clear()` 清空 `set` 。 ### 迭代器 `set` 提供了以下几种迭代器: 1. `begin()/cbegin()` 返回指向首元素的迭代器,其中 `*begin = front` 。 2. `end()/cend()` 返回指向数组尾端占位符的迭代器,注意是没有元素的。 3. `rbegin()/rcbegin()` 返回指向逆向数组的首元素的逆向迭代器,可以理解为正向容器的末元素。 4. `rend()/rcend()` 返回指向逆向数组末元素后一位置的迭代器,对应容器首的前一个位置,没有元素。 以上列出的迭代器中,含有字符 `c` 的为只读迭代器,你不能通过只读迭代器去修改 `set` 中的元素的值。如果一个 `set` 本身就是只读的,那么它的一般迭代器和只读迭代器完全等价。只读迭代器自 C++11 开始支持。 ### 查找操作 - `count(x)` 返回 `set` 内键为 x 的元素数量。 - `find(x)` 在 `set` 内存在键为 x 的元素时会返回该元素的迭代器,否则返回 `end()` 。 - `lower_bound(x)` 返回指向首个不小于给定键的元素的迭代器。 - `upper_bound(x)` 返回指向首个大于给定键的元素的迭代器。 - `empty()` 返回容器是否为空。 - `size()` 返回容器内元素个数。 ## `multiset` `multiset` 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。 与 `set` 不同的是, `multiset` 允许不同元素间拥有相同的值。 ### 插入与删除操作 - `insert(x)` 将元素 x 插入到 `multiset` 中。 - `erase(x)` 删除值为 x 的 **所有** 元素,返回删除元素的个数。 - `erase(pos)` 删除迭代器为 pos 的元素,要求迭代器必须合法。 - `erase(first,last)` 删除迭代器在 $[first,last)$ 范围内的所有元素。 - `clear()` 清空 `multiset` 。 ### 迭代器 `multiset` 的迭代器和 `set` 的 [迭代器](#_2) 类似,这里不再赘述。 ### 查找操作 `multiset` 的查找操作和 `set` 的 [查找操作](#_3) 类似,这里不再赘述。 ## `map` `map` 是有序键值对(Attribute–value pair)容器,它的元素的键是唯一的。搜索、移除和插入操作拥有对数复杂度。 `map` 通常实现为红黑树。 Loading