STL入门教程:set详解与示例
需积分: 0 138 浏览量
更新于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 上传
sayahusayahu
- 粉丝: 0
- 资源: 1
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析