set 的使用方式

普通

以下內容皆預設使用者引入命名空間 std

set 的特性

  • 資料丟進 set 後會自動排序好
  • set 中的資料不會重複
  • 不支援隨機存取
  • 刪除資料與插入資料的複雜度為 logn\log n
  • 要使用 std::set 的話要引入標頭檔 <set>

初始化

語法

set<int> st_1{1, 2, 3};
set<int> st_2; // 空的 set

插入元素

語法

set<int> st_1;
st_1.insert(3);
st_1.insert(2);
st_1.insert(1);
st_1.insert(2);
// st_1 : {1, 2, 3}

使用迴圈遍歷 set

因為 set 不支援隨機存取,所以必須使用迭代器才能遍歷這個容器。

語法

set<int> st_1;
// 將 1 到 10 丟進 set
for(int i = 1; i <= 10; i++) {
    st_1.insert(i);
}

// 使用迭代器遍歷 set
for(auto it = st.begin(); it != st.end(); it++) {
    cout << *it << ' ';
}

// 也可以寫成這樣
for(auto i : st) {
    cout << i << ' ';
}

刪除 set 中的元素

語法

set<int> st_1;
st_1.insert(1);
st_1.insert(2);
st_1.insert(3);
// st_1 : {1, 2, 3}
st_1.erase(st.begin()); // 使用迭代器刪除
// st_1 : {2, 3}
st_1.erase(3); // 使用元素刪除
// st_1 : {2}
st_1.clear(); // 刪除 set 中的所有元素

判斷 set 中是否出現特定元素

語法

set<int> st_1;
for(int i = 1; i <= 10; i++) {
    st_1.insert(i);
}
bool find_2 = st_1.count(2);
bool find_15 = st_1.count(15);
cout << find_2 << endl; // true
cout << find_15 << endl; // false

auto it_3 = st_1.find(3); // it_3 為 3 在 st_1 中的迭代器
auto it_12 = st_1.find(12); // it_12 = st.end()

判斷 set 是否是空的

語法

set<int> st_1;
bool emp = st_1.empty(); // true
st_1.insert(2);
emp = st_1.empty(); // false