Set容器
set/ multiset 容器
1 set基本概念
简介:
- 所有元素都会在插入时自动被排序
本质:
- set/multiset属于关联式容器,底层结构是用二叉树实现。
set和multiset区别:
- set不允许容器中有重复的元素
- multiset允许容器中有重复的元素
2 运算符
Set 版本 | Multiset 版本 | 描述 |
---|---|---|
operator! = (set) | operator! = (multiset) | 测试运算符左侧的 set 或 multiset 对象是否不等于右侧的 set 或 multiset 对象。 |
operator< (set) | operator< (multiset) | 测试运算符左侧的 set 或 multiset 对象是否小于右侧的 set 或 multiset 对象。 |
operator<= (set) | operator < = (multiset) | 测试运算符左侧的 set 或 multiset 对象是否小于或等于右侧的 set 或 multiset 对象。 |
operator = = (set) | operator = = (multiset) | 测试运算符左侧的 set 或 multiset 对象是否等于右侧的 set 或 multiset 对象。 |
operator> (set) | operator> (multiset) | 测试运算符左侧的 set 或 multiset 对象是否大于右侧的 set 或 multiset 对象。 |
operator>= (set) | operator>= (multiset) | 测试运算符左侧的 set 或 multiset 对象是否大于或等于右侧的 set 或 multiset 对象。 |
3 专用化模板
Set 版本 | Multiset 版本 | 描述 |
---|---|---|
swap | 交换 (multiset) | 交换两个集或多个集的元素。 |
C++ 标准库容器 set 类用于存储和检索集合的数据。set 中的元素值是唯一的,并用作数据自动排序依据 set 的键值。 中元素的值 set 不能直接更改。 必须先删除旧值,才能插入具有新值的元素。
C++ 标准库集是:
-
大小可变的关联容器,支持基于关联键值高效检索元素值。 此外,它是一个简单的关联容器,因为它的元素值是它的键值。
-
可逆,因为它提供双向迭代器来访问其元素。
-
有序,因为它的元素在容器中根据指定的比较函数按键值排序。
唯一,每个元素必须具有唯一键。 集还是简单关联容器,因此它的元素也是唯一的。
集也描述为类模板,因为它提供的功能是泛型的,独立于作为元素包含的特定数据类型。 可使用的数据类型作为类模板以及比较函数和分配器中的参数指定。
容器类型选择通常应根据应用程序所需的搜索和插入的类型。 关联容器针对查找、插入和移除操作进行了优化。 显式支持这些操作的成员函数非常高效,在平均与容器中的元素数对数成正比的时间执行这些操作。 插入元素会使任何 iterator 无效,删除元素只会使指向已删除元素的 iterator 失效。
当应用程序满足将值与其键关联的条件时,应选择集作为关联容器。 集的元素是唯一的,并用作其自己的排序键。 此类结构的模型是排序列表,如关键字排序列表,其中关键字只能出现一次。 如果允许关键字多次出现,则应使用多重集合作为适当的容器结构。 如果需要将值附加到唯一关键字的列表,则映射应为包含此数据的适当结构。 如果键不唯一,则多重映射将是选择的容器。
4 函数
名称 | 说明 |
---|---|
begin | 返回一个迭代器,此迭代器用于发现 set 中的第一个元素。 |
cbegin | 返回一个常量迭代器,此迭代器用于发现 set 中的第一个元素。 |
cend | 返回一个常量迭代器,此迭代器用于发现 set 中最后一个元素之后的位置。 |
clear | 清除 set 的所有元素。 |
containsC++20 | 检查 中是否有具有指定键的元素 set 。 |
count | 返回 set 中其键与指定为参数的键匹配的元素数量。 |
crbegin | 返回一个常量迭代器,此迭代器用于发现反向 set 中的第一个元素。 |
crend | 返回一个常量迭代器,此迭代器用于发现反向 set 中最后一个元素之后的位置。 |
emplace | 将就地构造的元素插入到 set。 |
emplace_hint | 将就地构造的元素插入到 set,附带位置提示。 |
empty | 测试 set 是否为空。 |
end | 返回一个迭代器,此迭代器用于发现 set 中最后一个元素之后的位置。 |
equal_range | 返回一对迭代器,这两个迭代器分别用于发现 set 中其键大于指定键的第一个元素,以及 set 中其键等于或大于指定键的第一个元素。 |
erase | 从集中的指定位置移除一个元素或元素范围,或者移除与指定键匹配的元素。 |
find | 返回一个迭代器,此迭代器用于发现 set 中其键与指定键等效的元素的位置。 |
get_allocator | 返回用于构造 allocator 的 set 对象的副本。 |
insert | 将一个元素或元素范围插入到 set。 |
key_comp | 检索用于对 set 中的键进行排序的比较对象副本。 |
lower_bound | 返回一个迭代器,此迭代器指向集中其键等于或大于指定键的第一个元素。 |
max_size | 返回 set 的最大长度。 |
rbegin | 返回一个迭代器,此迭代器用于发现反向 set 中的第一个元素。 |
rend | 返回一个迭代器,此迭代器用于发现反向 set 中最后一个元素之后的位置。 |
size | 返回 set 中的元素数量。 |
swap | 交换两个 set 的元素。 |
upper_bound | 返回一个迭代器,此迭代器指向 set 中其键大于指定键的第一个元素。 |
value_comp | 检索用于对 set 中的元素值进行排序的比较对象副本。 |
示例链接https://docs.microsoft.com/zh-cn/cpp/standard-library/set-class?view=msvc-160