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";
}
提示:也可以使用迭代器遍历集合,这将在后续章节中详细介绍。