STL入门教程:set详解与示例

需积分: 0 4 下载量 9 浏览量 更新于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`的使用能帮助程序员编写更加高效和整洁的代码。