C++ STL Set 容器详解及常用操作
需积分: 49 111 浏览量
更新于2024-07-30
收藏 317KB PDF 举报
"c++_set操作说明"
C++中的`set`容器是一种关联容器,它存储唯一的关键字值,并且按照这些值自动排序。`set`容器的实现基于红黑树数据结构,这使得插入、删除和查找操作的时间复杂度通常为O(log n)。在STL中,`set`提供了多种操作方法,适用于需要快速查找和保持数据唯一性的场景。
### set容器的使用
要使用`set`,首先需要包含头文件`#include <set>`,并使用`std`命名空间。`set`模板类定义如下:
```cpp
template<
class Key,
class Compare = less<Key>,
class Allocator = allocator<Key>
>
```
- `Key`:表示存储在`set`中的元素类型,即关键字的类型。
- `Compare`:是一个比较函数对象,用于确定元素之间的顺序,默认是`less<Key>`,提供小于关系的比较。
- `Allocator`:代表内存管理器,用于分配和释放内存,默认是`allocator<Key>`。
### set的主要操作
#### 常用成员函数
1. 构造函数:创建一个空的`set`,或者使用初始序列或已存在的容器进行初始化。
2. 插入操作:
- `insert(const value_type& val)`:插入一个元素。
- `insert(InputIterator first, InputIterator last)`:插入一个范围内的元素。
3. 删除操作:
- `erase(const key_type& val)`:删除具有特定值的元素。
- `erase(iterator pos)`:删除迭代器指向的元素。
- `erase(iterator first, iterator last)`:删除迭代器范围内的元素。
4. 查询操作:
- `find(const key_type& val)`:返回指向具有指定值的元素的迭代器,如果没有找到则返回`end()`。
- `count(const key_type& val)`:返回具有指定值的元素数量,对于`set`来说,结果要么是0要么是1。
5. 容量操作:
- `empty()`:检查容器是否为空。
- `size()`:返回容器中元素的数量。
6. 迭代器操作:
- `begin()`:返回指向第一个元素的迭代器。
- `end()`:返回指向最后一个元素之后的迭代器。
- `rbegin()`:返回反向迭代器,指向最后一个元素。
- `rend()`:返回反向迭代器,指向第一个元素之前的位置。
7. 修改操作:
- `clear()`:删除所有元素。
8. 比较操作:
- `operator==`(const set& x):比较两个`set`是否相等。
- `operator!=`(const set& x):比较两个`set`是否不相等。
- `operator<(const set& x)`:比较`set`的排序规则。
### 使用示例
```cpp
#include <iostream>
#include <set>
int main() {
std::set<int> mySet;
// 插入元素
mySet.insert(10);
mySet.insert(20);
mySet.insert(30);
// 输出元素
for (const auto& val : mySet) {
std::cout << val << " ";
}
std::cout << std::endl;
// 查找元素
if (mySet.find(20) != mySet.end()) {
std::cout << "Found element 20" << std::endl;
}
// 删除元素
mySet.erase(20);
return 0;
}
```
### 注意事项
- `set`中的元素值是唯一的,重复插入相同的元素不会增加元素数量。
- 元素的排序是由`Compare`模板参数决定的,如果需要自定义排序规则,可以传递自定义比较函数。
- `set`中的元素不可变,一旦插入,其值就不能被修改。如果需要修改值,通常需要删除原有元素并插入新值。
C++的`set`容器是处理唯一关键字值的有效工具,特别适用于需要快速查找、保持唯一性以及按特定顺序存储数据的场合。通过熟练掌握其操作方法,开发者可以更高效地编写代码。
279 浏览量
2021-08-09 上传
2021-08-09 上传
2021-08-11 上传
2021-08-09 上传
124 浏览量
2021-09-29 上传
2021-08-09 上传
点击了解资源详情

chengjisihan0069
- 粉丝: 2
最新资源
- 桌面玫瑰恶搞小程序,带给你不一样的开心惊喜
- Win7系统语言栏无法显示?一键修复解决方案
- 防止粘贴非支持HTML的Quill.js插件
- 深入解析:微软Visual C#基础教程
- 初学者必备:超级玛丽增强版源码解析
- Web天气预报JavaScript插件使用指南
- MATLAB图像处理:蚁群算法优化抗图像收缩技术
- Flash AS3.0打造趣味打地鼠游戏
- Claxed: 简化样式的React样式组件类
- Docker与Laravel整合:跨媒体泊坞窗的设置与配置
- 快速搭建SSM框架:Maven模板工程指南
- 网众nxd远程连接工具:高效便捷的远程操作解决方案
- MySQL高效使用技巧全解析
- PIC单片机序列号编程烧录工具:自动校验与.num文件生成
- Next.js实现React博客教程:日语示例项目解析
- 医院官网构建与信息管理解决方案