Set是C++标准模板库(STL)中的一种关联容器,用于存储一组不重复的元素,并且会自动对元素进行排序。Set容器的特点是元素不重复且有序。
特性:
- 自动排序: Set容器会根据元素的键值自动进行排序,因此可以保证集合中的元素是有序的。
- 元素唯一: Set容器会自动确保集合中不包含重复的元素,每个元素只能出现一次。
优点:
- 快速查找: 在Set容器中查找特定元素的速度非常快,时间复杂度为O(log n)。
- 唯一性: Set容器确保集合中不包含重复的元素,适用于需要维护唯一性的场景。
- 自动排序: Set容器会自动对元素进行排序,无需手动操作。
缺点:
- 插入和删除相对较慢: 由于Set容器需要维护元素的有序性,插入和删除元素时可能会导致元素的重新排序,性能略低于其他容器。
- 不支持随机访问: Set容器中的元素是自动排序的,因此不支持通过索引进行随机访问。
适用范围:
- 当需要存储一组不重复的元素,并且希望这些元素是有序的时,可以选择使用Set容器。
- 当需要快速查找特定元素并确保唯一性时,Set容器是一个不错的选择。
- 在需要实现一些集合运算,如并集、交集、差集等操作时,Set容器也可以发挥作用。
常用成员函数简介:
insert(const value_type& val)
: 在Set容器中插入值为val
的元素。erase(const value_type& val)
: 从Set容器中删除值为val
的元素。find(const value_type& val)
: 查找值为val
的元素是否存在于Set容器中,如果存在,则返回指向该元素的迭代器;否则返回end()
迭代器。size()
: 返回Set容器中元素的个数。empty()
: 判断Set容器是否为空,如果为空则返回true
,否则返回false
。clear()
: 清空Set容器中的所有元素。begin()
: 返回指向第一个元素的迭代器。end()
: 返回指向超出最后一个元素的迭代器。#include <iostream> #include <set> #include <algorithm> #include<numeric> int main() { // 创建一个空的 std::set std::set<int> mySet = {2,6,78,20}; // 插入元素 mySet.insert(10); mySet.insert(20); // 插入数据的方法 // 方法1:使用 insert() 函数插入单个元素 mySet.insert(10); // 方法2:使用 emplace() 函数插入单个元素 mySet.emplace(20); // 方法3:使用 insert() 函数的范围版本插入多个元素 std::set<int> anotherSet; anotherSet.insert(mySet.begin(), mySet.end()); //打印数据 for (auto it = mySet.begin(); it != mySet.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; // 删除数据的方法 // 方法1:使用 erase() 函数删除指定元素 mySet.erase(10); // 方法2:使用 erase() 函数的迭代器版本删除指定元素 auto it = mySet.find(20); if (it != mySet.end()) { mySet.erase(it); } // 方法3:使用 clear() 函数清空集合中的所有元素 anotherSet.clear(); // 遍历 set 并打印元素 std::cout << "Set elements: "; for (int num : mySet) { std::cout << num << " "; } std::cout << std::endl; // 查找元素 it = mySet.find(20); if (it != mySet.end()) { std::cout << "Element 20 found in set" << std::endl; } else { std::cout << "Element 20 not found in set" << std::endl; } // 使用标准算法对 set 进行操作 // 计算 set 中元素的总和 int sum = std::accumulate(mySet.begin(), mySet.end(), 0); std::cout << "Sum of set elements: " << sum << std::endl; // 查找 set 中的最小元素 auto minElement = *std::min_element(mySet.begin(), mySet.end()); std::cout << "Minimum element in set: " << minElement << std::endl; // 查找 set 中的最大元素 auto maxElement = *std::max_element(mySet.begin(), mySet.end()); std::cout << "Maximum element in set: " << maxElement << std::endl; return 0; }