## set c++ 中的`set`其實也是一集合(set),功能是會自動排序並且不會儲存一樣的元素 ### 特性 1. 動態調整記憶體大小(不用事先定義大小) 2. 自動排序以及相同元素只會有一個 ## 使用時機 1. 需要整理一堆數據但只需要知道裡面有哪些數據的 ## 程式碼區 ### 1. 函式庫引入 ```cpp= #include <set> ``` ### 2. 初始化 1. 基本定義 ```= set<資料型態>名字; ``` :::warning 1. 名字不能是保留字 [C++ 筆記: 保留字](/80Y4ImqXQGGTQvr3gqbTYA) 2. 資料型態不一定只有`int`、`char`之類的,像`set`、`stack` 也可以當資料型態喔 範例 : ```cpp= vector<set>vec; ``` ::: ex: ```cpp= set<int>st; ``` 2. 定義陣列裡內容 ```cpp= // 1 set<int>st({1, 2, 3}); // 2 set<int>st = {1, 2, 3}; ``` 3. 複製全部陣列 ```cpp= // 1 set<int>st1({1, 2, 3}); set<int>st2 = st1; // 2 set<int>st({1, 2, 3}); set<int>st2(st1); ``` 4. 複製部分陣列(運用[迭代器](###迭代器)) ```cpp= set<int>st1({1, 2, 3, 4, 5}); auto it = st1.begin(); // 迭代器(iterator) set<int>st2(it, it+3); //st1[0] ~ st[2] //st2 = {1, 2, 3}; ``` 5. 從傳統陣列轉為set ```cpp= int mp[3] = {1, 2, 3}; set<int>st = (mp, mp+3); ``` 6. 複製部分傳統陣列 ```cpp= int mp[5] = {1, 2, 3, 4, 5}; set<int>st(n+2, n+4); // //mp[2] ~ mp[3] //st = {3, 4} ``` ### 3. 讀取陣列中元素 (只能用迭代方法) ```cpp= set<int>st({1, 2, 3}); // 1(推薦,超好用的) for (auto v : st) cout << v << " "; // 1 2 3 // 2(盡量用auto 來代替,但建議只有迴圈跟迭代器這樣用,否則你的程式碼可讀性會變得很低) for (set<int>v : st) cout << v << " "; // 1 2 3 ``` ### 4. 增減元素 1. 新增特定位置(運用[迭代器](###迭代器)) ```cpp= // 1個 set<int>st({1, 2, 3}); st.insert(4); // st = {1, 2, 4, 3} //多個 set<int>st1({1, 2, 3}); set<int>st2({4, 5, 6}); st1.insert(st1.begin() + 1, st2.begin(), st2.end()); //st1 = {1, 2, 3, 4, 5, 6} ``` 4. 刪除特定位置(運用[迭代器](###迭代器)) ```cpp= set<int>st({1, 2, 3}); st.erase(st.begin(), st.end()); //st = {} set<int>st1({1, 2, 3}); set<int>st2({2, 3, 4}); st1.erase(st2.begin(), st2.end()); //st1 = {1} ``` ### 5. 迭代器 > 通常搭配迴圈以及條件式使用,也可以用來取某段陣列中的元素 ```cpp= set<int>st({1, 2, 3}); //1. st.begin() : 取第一個的前面一個(從第一開始) cout << st.begin(); //2. st.end() : 0 取最後一個的後面一個(從第一開始) cout << st.end(); ``` ### 7. 其他函式 1. 判斷長度 `.size()` > 通常搭配`for`迴圈做使用,當最迴圈的中止條件 ```cpp= set<int>st({1, 2, 3}); cout << st.size(); // 3 ``` 2. 判斷是否為空 `.empty()` > 通常搭配`if`、`while`之類的條件是做使用 ```cpp= set<int>st({1, 2, 3}); cout << st.empty(); // 0(false) ``` 3. 清空set陣列 ```cpp= set<int>st({1, 2, 3}) st.clear() // st = {} ```