中关村在线

软件

C++ STL set 使用指南

set是C++ STL中一种非常实用的容器类型。

1、 声明一个 set 的方法

2、 value_type 表示 set 容器中存储的元素类型,可以是int、string等基本类型,也可以是自定义的结构体名称。

3、 STL容器通常按容器名+value_type+名称的方式定义,统一规范命名。

4、 需包含 set 头文件,使用 include 来引入相关功能支持。

5、 set中的元素需支持小于比较,其底层通过红黑树实现自动排序与高效查找。

6、 C++内置的int、string等类型已预先定义了小于号运算符。

7、 整数在集合中按升序排列,字符串则按照字典顺序进行排序。

8、 自定义结构体需先掌握运算符重载方法

9、 一棵红黑树示意图,源自网络。

10、 set 的多种内置方法功能丰富

11、 在 set 中插入或删除元素 x,需确保 x 的类型与定义 set 时指定的类型一致。

12、 时间复杂度为O(log?n),其中n表示集合中元素的个数。

13、 若 x 不在集合中,则调用 erase(x) 不会产生任何删除操作。

14、 如图

15、 begin() 返回指向 set 第一个元素的迭代器,end() 返回指向 set 末尾的迭代器。

16、 由于是迭代器,需在前面加*才能转为声明时的类型。

17、 即

18、 声明了一个字符串集合 s。

19、 由于迭代器无法直接赋值给字符串类型,因此 `string k = s.begin();` 这样的写法是错误的。

20、 *解凤丽指出,需添加代码 string k=*s.begin(); 来实现初始字符的引用操作。

21、 时间复杂度为常数阶

22、 如图

23、 判断集合是否为空或获取集合中元素的个数,分别使用 empty() 和 size() 方法。

24、 所有STL容器均内置了这两个函数功能。

25、 时间复杂度为常数阶,即O(1)

26、 如图

27、 需指出set具有元素唯一性特点

28、 Set会自动去重,多次添加相同元素也仅保存一次。

29、 这特点真不错

30、 若不希望set自动去重,可选择使用multiset,但此处暂不展开说明。

31、 如图

32、 clear() 方法用于清空集合中的所有元素。

33、 时间复杂度为线性阶

34、 如图

35、 查找集合中是否存在元素x,若存在则返回指向该元素的迭代器,若不存在则返回指向末尾的迭代器。

36、 时间复杂度为对数级别。

37、 如图

38、 由于集合具有特性,常用于数据排序与去除重复元素。

39、 以下代码可同时实现这两项功能。

40、 定义了一个名为 it 的迭代器,用于指向存储整型数据的集合(set),可遍历其中元素。

41、 因为 end() 返回的是末尾迭代器,不能解引用。

42、 由于迭代器仅支持等于和不等于操作,不支持小于比较。

43、 如图

44、 以上介绍了set的主要用法及其常见应用场景。

45、 尽管集合的多数内置函数时间复杂度较高,但合理使用能显著简化编程过程,提升代码效率,带来诸多便利。

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具