C++ 集合
C++ 集合 (Set)
Set 儲存唯一元素,這些元素
- 會自動按升序排序。
- 是唯一的,這意味著相等或重複的值將被忽略。
- 可以新增或刪除,但現有元素的值不能被更改。
- 不能透過索引號訪問,因為順序是基於排序而非索引的。
要使用 set,您必須包含 <set>
標頭檔案
// 包含 set 庫
#include <set>
建立集合
要建立 set,請使用 set
關鍵字,並在尖括號 <>
中指定它應該儲存的**型別**,然後是 set 的名稱,例如:set<type> setName
。
示例
// 建立一個名為 cars 的 set,它將儲存字串
set<string> cars;
如果您想在宣告時就新增元素,請將它們放在花括號 {}
中,用逗號分隔的列表中
示例
// 建立一個名為 cars 的 set,它將儲存字串
set<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 列印 set 元素
for (string car : cars) {
cout << car << "\n";
}
輸出將是:
寶馬
福特
Mazda
沃爾沃
從上面的結果可以看出,set 中的元素會自動排序。在這種情況下,因為我們處理的是字串,所以是按字母順序排序的。
如果您將整數儲存在 set 中,返回的值將按數字順序排序
示例
// 建立一個名為 numbers 的 set,它將儲存整數
set<int> numbers = {1, 7, 3, 2, 5, 9};
// 列印 set 元素
for (int num : numbers) {
cout << num << "\n";
}
輸出將是:
1
2
3
5
7
9
注意: set 的型別(例如上面示例中的 string
和 int
)一旦宣告就無法更改。
按降序對 Set 進行排序
預設情況下,set 中的元素按升序排序。如果要反轉順序,可以使用尖括號內的 greater<type>
仿函式,如下所示
示例
// 按降序對 set 中的元素進行排序
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> 中指定的型別必須與 set 中元素的型別(我們示例中的 int
)相匹配。
唯一元素
Set 中的元素是唯一的,這意味著它們不能重複或相等。
例如,如果我們嘗試兩次將 "BMW" 新增到 set 中,重複的元素將被忽略
示例
set<string> cars = {"Volvo", "BMW", "Ford", "BMW", "Mazda"};
// 列印 set 元素
for (string car : cars) {
cout << car << "\n";
}
輸出將是:
寶馬
福特
Mazda
沃爾沃
新增元素
要向 set 新增元素,您可以使用 .insert()
函式
示例
set<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 新增新元素
cars.insert("Tesla");
cars.insert("VW");
cars.insert("Toyota");
cars.insert("Audi");
自己動手試一試 »
移除元素
要從 set 中刪除特定元素,您可以使用 .erase()
函式
示例
set<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 刪除元素
cars.erase("Volvo");
cars.erase("Mazda");
自己動手試一試 »
要刪除 set 中的所有元素,您可以使用 .clear()
函式
查詢 Set 的大小
要查詢 set 中有多少個元素,請使用 .size()
函式
檢查 Set 是否為空
使用 .empty()
函式來判斷 set 是否為空。
.empty()
函式在 set 為空時返回 1
(true),否則返回 0
(false)
示例
set<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.empty(); // 輸出 0 (非空)
自己動手試一試 »
遍歷 Set
您可以使用 **for-each 迴圈**來遍歷 set
示例
set<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (string car : cars) {
cout << car << "\n";
}
自己動手試一試 »
提示: 也可以使用 迭代器 遍歷 set,您將在後面的章節中瞭解更多。