C++ STL set集合容器常用用法

jopen 12年前發布 | 29K 次閱讀 C/C++開發 C/C++

set集合容器:實現了紅黑樹的平衡二叉檢索樹的數據結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大于左子樹所有節點的鍵值,小于右子樹所有節點的鍵值;另外,還得保證根節點左子樹的高度與右子樹高度相等。
平衡二叉檢索樹使用中序遍歷算法,檢索效率高于vector、deque和list等容器,另外使用中序遍歷可將鍵值按照從小到大遍歷出來。
構造set集合主要目的是為了快速檢索,不可直接去修改鍵值。

常用操作:
1.元素插入:insert()
2.中序遍歷:類似vector遍歷(用迭代器)
3.反向遍歷:利用反向迭代器reverse_iterator。
    例:
    set<int> s;
    ......
    set<int>::reverse_iterator rit;
    for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素刪除:與插入一樣,可以高效的刪除,并自動調整使紅黑樹平衡。
            set<int> s;
            s.erase(2);        //刪除鍵值為2的元素
            s.clear();
5.元素檢索:find(),若找到,返回該鍵值迭代器的位置,否則,返回最后一個元素后面一個位置。
            set<int> s;
            set<int>::iterator it;
            it=s.find(5);    //查找鍵值為5的元素
            if(it!=s.end())    //找到
                cout<<*it<<endl;
            else            //未找到
                cout<<"未找到";
6.自定義比較函數
    (1)元素不是結構體:
        例:
        //自定義比較函數myComp,重載“()”操作符
        struct myComp
        {
            bool operator()(const your_type &a,const your_type &b)
            [
                return a.data-b.data>0;
            }
        }
        set<int,myComp>s;
        ......
        set<int,myComp>::iterator it;
    (2)如果元素是結構體,可以直接將比較函數寫在結構體內。
        例:
        struct Info
        {
            string name;
            float score;
            //重載“<”操作符,自定義排序規則
            bool operator < (const Info &a) const
            {
                //按score從大到小排列
                return a.score<score;
            }
        }
        set<Info> s;
        ......
        set<Info>::iterator it;

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!