set

set

集合,一个内部自动有序且不含重复元素的容器

set只能通过迭代器访问其元素:set <typename>::iterrator it;

  • insert()

    insert(x)可将x插入set容器中,并自动递增排序和去重

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>
    #include <set>
    using namespace std;

    int main()
    {
    set <int> st;
    st.insert(3);
    st.insert(5);
    st.insert(4);
    st.insert(2);
    //必须使用迭代器访问元素
    for(set<int>::iterator it=st.begin();it!=st.end();++it)
    {
    printf("%d ",*it);
    }


    }
    1
    2 3 4 5
  • find()

    find(value)返回set中对应值为value的迭代器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <set>
    using namespace std;

    int main()
    {
    set <int> st;
    for(int i=1;i<=3;++i)
    {
    st.insert(i);
    }
    set <int >::iterator it=st.find(2);
    printf("%d",*it);
    //上面两句可写成printf("%d",*(st.find(2)));
    }
    1
    2
  • erase

    • 删除单个元素

      • st.erase(it),it为所需删除元素的迭代器

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        #include <stdio.h>
        #include <set>
        using namespace std;

        int main()
        {
        set <int> st;
        st.insert(100);
        st.insert(200);
        st.insert(100);
        st.insert(300);
        st.erase(st.find(100));//利用find函数找到100,然后用erase删除它
        //st.erase(st.find(200));//利用find函数找到200,然后用erase删除它

        //必须使用迭代器访问元素
        for(set<int>::iterator it=st.begin();it!=st.end();++it)
        {
        printf("%d ",*it);
        }


        }
        1
        200 300
      • st.erase(value),value为所需删除元素的值

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        #include <stdio.h>
        #include <set>
        using namespace std;

        int main()
        {
        set <int> st;
        st.insert(100);
        st.insert(200);
        st.insert(100);
        st.insert(300);

        st.erase(100);//删除set中值为100的元素

        //必须使用迭代器访问元素
        for(set<int>::iterator it=st.begin();it!=st.end();++it)
        {
        printf("%d ",*it);
        }


        }
        1
        200 300
    • 删除一个区间内的所有元素

      st.erase(first,last),first和last为迭代器,左闭右开

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      #include <stdio.h>
      #include <set>
      using namespace std;

      int main()
      {
      set <int> st;
      st.insert(100);
      st.insert(200);
      st.insert(150);
      st.insert(300);
      st.insert(700);
      st.insert(500);

      set <int>::iterator it =st.find(200);
      st.erase(it,st.end());//删除元素200至set末尾的全部元素

      //必须使用迭代器访问元素
      for(set<int>::iterator it=st.begin();it!=st.end();++it)
      {
      printf("%d ",*it);
      }


      }
      1
      100 150
  • size()

    获得set内元素的个数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    #include <set>
    using namespace std;

    int main()
    {
    set <int > st;
    st.insert(2);
    st.insert(5);
    st.insert(4);
    printf("%d",st.size());

    }
    1
    3
  • clear()

    清空set中的所有元素

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
    #include <set>
    using namespace std;

    int main()
    {
    set <int > st;
    st.insert(2);
    st.insert(5);
    st.insert(4);

    st.clear();//清空set

    printf("%d",st.size());

    }
    1
    0
凡希 wechat
喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号
呐,请我吃辣条