C++標准模板庫(STL)之Set


1、Set的用法

Set:集合,一個內部自動有序而且不重復元素的容器。使用set,要加頭文件#include<set>和using namespace std;

  1.1、Set的定義

 

set<typename> name;
set<int> name;
set<double> name;
set<char> name;
set<Node> name;//Node是結構體類型
set<typename> Arrayname[arraySize];//set<int> a[100];a[0]~a[99]的每一個都是一個set容器。
/*
定義和寫法和vector基本一樣,同樣typename可以是任何基本類型,結構體,STL容器類型。
同樣,typename是容器的時候,>>后要加空格,避免編譯器當成位運算出錯。
*/

 

  1.2、set容器內元素的訪問

  set只能通過迭代器iterator訪問

set<typename>::iterator it;//typename對應定義set時的類型。
set<int>::iterator it;

  因為除了vector和string之外的STL的容器都不支持以下標的方式訪問。

#include<stdio.h>
#include<set>
using namespace std;
int main()
{
    set<int> st;
    for(int i=0;i<5;i++)
    {
        st.insert(i);
    }
    for(set<int>::iterator it=st.begin();it!=st.end();it++)
    {
        printf("%d ",*it);
    }
    return 0;
}
View Code

  set內的元素,自動遞增排序,並且去重。

  1.2、set常用函數

    1.2.1、insert()函數

    insert(x):將x插入set容器中,並且自動遞增排序和去重。時間復雜度為O(logN),N為元素個數

    1.2.2、find()函數

    find(value):查找值為value的元素,返回它的迭代器。時間復雜度為O(logN),N為元素個數

    1.2.3、erase()函數

    erase(x):刪除單個元素,時間復雜度為O(logN)

    erase(a,b);刪除左閉右開區間內[a,b)的元素,時間復雜度為O(b-a)

    1.2.4、size()函數

    size():用來獲得set內元素的個數,時間復雜度為O(1)

    1.2.5、clear()函數

    clear():用來清空set所有元素,時間復雜度為O(N) 

#include<stdio.h>
#include<set>
using namespace std;
int main()
{
    set<int> st;
    st.insert(2);
    st.insert(5);
    st.insert(1);
    st.insert(2);
    st.inert(4);
    st.insert(3);
    int len=st.size();//3

    for(set<int>::iterator it=st.begin();it!=st.end();it++)
    {
        printf("%d ",*it);//1,2,3,4,5
    }
    st.erase(st.find(2));//利用find()函數先找到2,然后erase刪除它
    st.erase(3);//刪除set中值為3的元素,時間復雜度為O(logN)
    set<int>::iterator it=st.find(4);
    st.erase(it,st.end());//刪除元素2到set末尾之間的數,也就是4,5
    st.clear();
    int len_clear=st.size();//0
    return 0;
}
View Code

  1.3、set的用途

  set重要的作用:自動去重,升序排序。

 

2018-09-25 15:36:20

@author:Foreordination

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM