【C++教學】set 自動排序的唯一集合 說明與用法範例

set 是一個有序集合,元素自動排序且唯一,基於紅黑樹實現。適合需要快速查詢與保持元素唯一性的場景。

特性

  • 元素自動排序(預設升序由小排到大)。
  • 元素唯一,不允許重複。
  • 查詢、插入、刪除效率為 O(log n)。

成員函數介紹

  • insert:插入元素(自動排序,忽略重複)。
  • erase:刪除元素。
  • size:返回元素的數量。
  • find:搜尋指定值的元素,返回指向該元素的迭代器(iterator)。如果未找到,則返回 end() 迭代器。
  • count:返回指定值的元素數量(結果為 0 或 1,因為元素不會重複)。
  • empty:返回是否沒有元素。
  • clear:清除所有元素。
  • begin:返回指向第一個元素的迭代器。
  • end:返回指向集合末尾的迭代器。
  • rbegin:返回指向最後一個元素的反向迭代器。
  • rend:返回指向反向起點的迭代器。

用法範例

#include <iostream>
#include <set>
using namespace std;

int main() {
    // 建立集合
    set<int> st; // 宣告集合時預設為由小排到大
    //set<int, greater<int>> st; // 宣告集合時將排序改為由大排到小

    // 新增元素
    st.insert(20);
    st.insert(10); // 集合會自動排序,此行執行後st=[10,20]
    st.insert(30);
    st.insert(10); // 重複元素不會被加入,此行執行後st=[10,20,30]

    // 取得大小
    int size = st.size(); // st.size()=3
    
    // 取得第一個元素(最小)
    int min = *st.begin(); // min=10

    // 取得最後一個元素(最大)
    int max = *st.rbegin(); // max=30
    
    // 尋找指定元素
    if (st.find(30) != st.end()) 
    {
        // 元素存在
    }
    else
    {
        // 元素不存在
    }

    // 刪除元素
    st.erase(10); // 此行執行後st=[20,30]

    return 0;
}

適用場景

  • 需要保持元素唯一且自動排序時。
  • 頻繁查詢是否存在某元素時。

類似容器

其他類似的功能可以參考以下STL容器:

  • unordered_set
  • multiset

返回頂端