STL入门教程:set详解与示例
需积分: 0 136 浏览量
更新于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 上传
2021-01-08 上传
2020-08-31 上传
2020-10-16 上传
sayahusayahu
- 粉丝: 0
- 资源: 1
最新资源
- 2018秋招java笔试题-coding-interview-chinese:Alistofinterestingrepositoriesab
- typora系统主题,使主题更多元化
- lianxiNotDelete
- brOscatLib:流行的Oscat库(www.oscat.de)的B&R自动化工作室端口
- project-pathfinder:在Unity引擎中创建的交互式寻路模拟
- lede-mir4
- ScreenShotHtml2Canvas
- 自述文件生成器
- practiceHomepage
- Portable PGP-开源
- logback-core-1.2.3-API文档-中文版.zip
- django_learn:python django学习
- BucksAmok.m5v6ucdtoj.gaOnvaR
- -it1081c-final-lab-part-2
- 易语言DOS取系统信息源码-易语言
- github-slideshow:机器人提供动力的培训资料库