当前位置:   article > 正文

c++ STL 之集合—— set 详解_c++stlset

c++stlset

set是 stl 的一个关联容器,名叫“集合”,何为“集合”?其实就是一个数组,但有了数组何必还需集合,这是一个高深的问题。

目录

一、简介

        1.空间复杂度

        2. 与 vector 相比

                优点:

                缺点:

                综合:

二、 set 用法

        1.声明 set 

        2.新增“元素”

三、map 遍历

         1.使用 “iterator”

         2.使用 “auto”

四、关于 set 的函数

        1.find

        2.clear

         3.erase

        4.empty

        5.swap

        6.count

一、简介

        1.空间复杂度

    map 类似于 vector,可以随时创建新的元素,避免浪费过多空间,具体实现如下:

  1. pair<iterator,bool> insert(const value_type& __v)
  2. {return __tree_.__insert_unique(__v);}

        2. 与 vector 相比

                优点:

           set 可以直接查找值,只需要 O(log n) 的时间复杂度,而 vector 不但需要手写查找函数,时间复杂度还达到了 O(n)。

                缺点:

           vector 更类似数组,因此按下表访问时只需要 O(1) 的时间复杂度,而 set 根本没有下标,只能按值搜索。

                综合:

           set 适合用作桶,非常节省空间。vector则用作数组,它可以说与数组比较是只有优点,没有缺点。可见各有各的优点和缺点。

二、 set 用法

        1.声明 set 

    首先需要引用 “set” 头文件,如下:  

#include <set>

     声明时和一般模版类的声明方式一样,先注明类型(即 set )再填写模版,最后为变量名。例如:

set <int> s;


        2.新增“元素”

    我们可以使用 “insert” 函数,如下: 

s.insert(1);

三、map 遍历

         1.使用 “iterator”

     “iterator” 中文名为“迭代器”,访问方式如下:

  1. for(set <int>::iterator it = s.begin();it != s.end();++ it)
  2. {
  3.     cout << *it;
  4. }

    由于 it 是一个指针所以需要加 “*” 访问。

         2.使用 “auto”

    c++11 以后,新增了一种 for 循环语法(如下), vector、list 等容器也可以这么访问。

  1. for (auto i : v)
  2. {
  3.         
  4. }

四、关于 set 的函数

        1.find

     查找 x 在 set 中的位置,若不存在这个键返回 “s.end()”,各自返回指针,如下:

cout << s.find(x);

        2.clear

    清空 set,vector 等容器也有这个函数,如下:

s.clear();


         3.erase

   清除一个元素,或从 “begin” 到 “end” 的所有元素,注意参数需为指针,如下

  1. s.eraser(s.find(x));
  2. s.eraser(begin,end);

若在循环中,需要更新迭代器: 

  1. for (set<int>::iterator it = s.begin();it != s.end();++ it);
  2. it = s.erase(it);
  3. }


        4.empty

    查看 set 是否为空,如下:

if(s.empty()) cout << "Yes";


        5.swap

    交换两个 set,如下:

s.swap(temp);


        6.count 

    查找 x 在 set 中出现了几次,由于 set 不允许相同元素出现,所以返回值非 0 即 1,如下:

cout << s.count(x);

你学会了吗?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/778060
推荐阅读
相关标签
  

闽ICP备14008679号