STL入门教程:set详解与示例
需积分: 0 51 浏览量
更新于2024-09-13
收藏 61KB DOC 举报
"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`的使用能帮助程序员编写更加高效和整洁的代码。
2022-10-28 上传
2022-10-28 上传
2010-01-02 上传
2021-01-09 上传
2020-10-16 上传
2020-08-31 上传
2021-01-08 上传
2020-10-16 上传
2020-12-17 上传
sayahusayahu
- 粉丝: 0
- 资源: 1
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍