
STL入门教程:set详解与示例
下载需积分: 12 | 61KB |
更新于2024-09-13
| 111 浏览量 | 3 评论 | 举报
收藏
"set用法详解"
在C++编程语言中,`set`是STL(Standard Template Library,标准模板库)中的一个关联式容器。它是一个集合,存储唯一对象,并且内部按照排序规则组织这些对象。这篇教程将详细介绍`set`的用法,非常适合初学者学习。
`set`的基本特点:
1. 存储的数据类型是唯一的,不允许有重复元素。
2. 数据内部自动排序,排序依据是元素类型的比较操作符。
关联式容器与序列式容器(如vector、list和deque)的区别在于,关联式容器不关心元素的插入顺序,而是根据元素自身的值进行排序。`set`的底层实现通常是一个红黑树,保证了插入、查找和删除操作的时间复杂度为O(log n)。
创建`set`:
```cpp
std::set<int> s;
```
这会创建一个存储整数的空集合`set`。
插入元素:
```cpp
s.insert(1);
s.insert(2);
s.insert(3);
```
上述代码分别向`set`中插入整数1、2和3。由于`set`不允许重复,所以如果尝试插入已存在的元素,`insert`操作不会改变`set`的状态。
遍历`set`:
```cpp
for (auto it = s.begin(); it != s.end(); ++it) {
std::cout << *it << " ";
}
```
通过迭代器`begin()`和`end()`可以遍历`set`中的所有元素。
删除元素:
```cpp
s.erase(2);
```
此操作会从`set`中删除值为2的元素。如果要删除的元素不存在,`erase`函数不会报错。
查找元素:
```cpp
if (s.find(1) != s.end()) {
std::cout << "Element 1 is in the set." << std::endl;
} else {
std::cout << "Element 1 is not in the set." << std::endl;
}
```
`find`函数返回一个迭代器,指向找到的元素。如果元素不存在,返回`end()`。
`set`的成员函数还包括`empty()`用于检查是否为空,`size()`用于获取元素数量,以及`clear()`用于清空整个集合。
此外,`set`还有其变种`multiset`,允许存储重复元素,但仍然保持排序。而`map`和`multimap`则是键值对的关联式容器,它们的功能类似,但`map`的键也是唯一的,`multimap`则允许键重复。
示例代码中,定义了一个`print_int`函数对象,用于打印整数。然后在`main`函数中,使用`static const int arr[]`数组初始化了一个`set<int>`,并用`for_each`算法遍历`set`,将每个元素传递给`print_int`打印出来。
`set`是C++中一个非常有用的工具,它提供了一种高效的方式来存储和管理唯一对象的集合,同时也提供了方便的接口进行查找和操作。掌握`set`的使用能帮助程序员编写更加高效和整洁的代码。
相关推荐









资源评论

Mrs.Wong
2025.05.01
集合操作的实用指南,新手入门必备。⛅

AIAlchemist
2025.04.28
对于初学者来说,是一份非常好的学习材料。

Asama浅间
2025.03.26
深入浅出的set功能解析,助你快速掌握。

sayahusayahu
- 粉丝: 0
最新资源
- Symbian平台经典跑跑龙游戏《FrozenBubble》发布
- Delphi实现的Socket服务端编程示例
- 小巧实用的内存释放工具FreeRAM使用指南
- 绝美PNG透明水晶图标:美化程序界面的秘密
- 《Dive Into Python》中文版-程序员进阶Python专家指南
- C语言编程全集:电子书与教程分享
- Oracle报告构建学生培训指南
- 深入学习Hibernate框架技术
- 《PHP面向对象、模式与实践》第二版精华分享
- QQ游戏对对碰单机版:重温经典记忆
- 深入学习SQL Server 2000基础:系列课程视频第一讲
- 田原《计算机导论》电子教案全集下载
- Visual Basic高级编程技巧:掌握ActiveX控件
- 国人FLASH EXE2SWF V1.6新版本发布,提升效率解决BUG
- 企业人事管理系统设计与VB源码解析
- VNC远程控制软件:轻松实现局域网内共享演示
- 彩铃项目原代码分享:开发者的实用资源
- 如何用程序枚举窗口及其控件
- VC源码实现JPEG、BMP图像解压缩技术
- 精选全球明星屏保合集,展现无限魅力
- 深入学习集成电路设计的VHDL教程电子书
- 快速入门JavaScript网页编程教程
- 深入探索Flash MP3播放器及其开发
- Spring+Hibernate+Struts技术栈整合实践