C++ 集合
C++ 集合
集合 (Set) 以排序方式存储多个元素,其中每个元素都是唯一的。
集合中的元素:
- 会自动按升序排序
- 具有唯一性,相等的或重复的值会被忽略
- 可以添加和移除,但不能修改已存在元素的值
- 不能通过索引号访问,因为顺序是基于排序而非索引
要使用集合,需要包含 <set>
头文件:
// 包含集合库 #include <set>
创建集合
使用 set
关键字创建集合,在尖括号 <>
中指定存储值的类型,然后指定集合名称,格式为:
set<type> setName
实例
// 创建一个名为cars的集合,用于存储字符串 set<string> cars;
如果要在声明时添加元素,可以将元素放在花括号 {}
内的逗号分隔列表中:
实例
// 创建一个名为 cars 的集合,用于存储字符串 set<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 打印集合元素 for (string car : cars) { cout << car << "\n"; }
输出:
BMW Ford Tesla Volvo
从上面的结果可以看出,集合中的元素会自动排序。在这个例子中,因为是字符串,所以按字母顺序排序。
如果集合中存储的是整数,则会按数值大小排序:
实例
// 创建一个名为 numbers 的集合,用于存储整数 set<int> numbers = {1, 7, 3, 2, 5, 9}; // 打印集合元素 for (int num : numbers) { cout << num << "\n"; }
输出:
1 2 3 5 7 9
注意:集合的类型(如上面两个例子中的 string
和 int
)在声明后不能更改。
按降序排序集合
默认情况下,集合中的元素按升序排序。如果要反转排序顺序,可以在尖括号中使用 greater<type>
函数对象:
实例
// 按降序排序集合元素 set<int, greater<int>> numbers = {1, 7, 3, 2, 5, 9}; // 打印元素 for (int num : numbers) { cout << num << "\n"; }
输出:
9 7 5 3 2 1
注意:greater<type>
中指定的类型必须与集合元素的类型匹配(本例中为 int)。
唯一元素
集合中的元素是唯一的,这意味着它们不能重复或相等。
例如,如果我们尝试在集合中添加两次 "BMW",重复的元素会被忽略:
实例
set<string> cars = {"Volvo", "BMW", "Ford", "BMW", "Tesla"}; // 打印集合元素 for (string car : cars) { cout << car << "\n"; }
输出:
BMW Ford Tesla Volvo
添加元素
要向集合添加元素,可以使用 .insert()
函数:
实例
set<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 添加新元素 cars.insert("BYD"); cars.insert("VW"); cars.insert("Toyota"); cars.insert("Audi");
移除元素
要从集合中移除特定元素,可以使用 .erase()
函数:
实例
set<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 移除元素 cars.erase("Volvo"); cars.erase("Tesla");
要移除集合中的所有元素,可以使用 .clear()
函数:
实例
set<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 移除所有元素 cars.clear();
获取集合大小
要获取集合中元素的数量,可以使用 .size()
函数:
实例
set<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; cout << cars.size(); // 输出 4
检查集合是否为空
使用 .empty()
函数检查集合是否为空。
如果集合为空,.empty()
函数返回 1
(true),否则返回 0
(false):
实例
set<string> cars; cout << cars.empty(); // 输出 1(集合为空)
实例
set<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; cout << cars.empty(); // 输出 0(不为空)
遍历集合
可以使用 for-each
循环遍历集合:
实例
set<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; for (string car : cars) { cout << car << "\n"; }
提示:也可以使用迭代器遍历集合,这将在后续章节中详细介绍。