C++ STL Set容器详解

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值