• set(集合)类


    1、set(集合)和 map(映射) 都属于关联容器,它们都支持查询一个元素是否存在,并能有效地获取元素。实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。

    2、set中的元素总是从小到大排列,set通过二分查找树实现。

    3、set具有两个特点:<1>在set容器中,不存在两个值相等。 <2>元素值就是关键词本身

    4、如果要使用set类中的函数,需要使用以下包含命令

       # include<set>

       using namespace std;

    5、构造set函数////////////构造set集合主要目的是为了快速检索,不可直接去修改键值。

         set<数据类型> 数据名;

      

    # include<iostream>
    # include<set>
    using namespace std;
    int main()
    {
    set<int> s1;///////空set类
    set<int>::iterator it;///////iterator这里就相当于指向节点的指针////it是个set类型的指针
    int a[]={1,3,2,4,5};
    set<int> s2(a,a+5); //////利用指针对象初始化set集合///并且会自动从小到大排序
    set<int> s3(s2);//////////////利用拷贝构造函数初始化set集合
    for(it=s2.begin();it!=s2.end();it++)
    {
    cout<<*it<<" ";
    }
    cout<<endl;
    for(it=s3.begin();it!=s3.end();it++)/////begin函数与end函数------------返回set的第一个元素和最后一个元素的迭代器////
    {
    cout<<*it<<" ";
    }
    return 0;

    }

    6、set常用方法

    begin()        ,返回set容器的第一个元素

    end()      ,返回set容器的最后一个元素

    clear()          ,删除set容器中的所有的元素

    empty()    ,判断set容器是否为空-------------如果空,返回true;否则,返回false

    max_size()   ,返回set容器可能包含的元素最大个数

    size()      ,返回当前set容器中的元素个数

    rbegin     ,返回的值和end()相同-------------------用于反向迭代器

    rend()     返回的值和begin()相同------------------用于反向迭代器

    7、反向迭代器

    1. 定义
    反向迭代器(Reverse_Iterator)是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而--运算则访问下一个元素。
    2. 作用
    (1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算。但是,流迭代器由于不能反向遍历流,因此流迭代器不能创建反向迭代器。
    (2)可以通过reverse_iterator::base()将反向迭代器转换为普通迭代器使用,从逆序得到普通次序。这是因为:有些容器的成员函数只接受iterator类型的参数,所以如果你想要在ri所指的位置插入一个新元素,你不能直接这么做,因为vector的insert函数不接受reverse_iterator。如果你想要删除ri 所指位置上的元素也会有同样的问题。erase成员函数会拒绝reverse_iterator,坚持要求iterator。为了完成删除和一些形式的插入操作,你必须先通过base函数将reverse_iterator转换成iterator,然后用iterator来完成工作。

    # include<iostream>
    # include<set>
    using namespace std;
    int main()
    {
    set<int>::iterator it;
    set<int>::reverse_iterator rit;///////////////////定义反向迭代器 rit
    int a[5]={10,2,5,24,15};
    set<int> s(a,a+5);
    int i;

    for(it=s.begin();it!=s.end();it++)
    {
    cout<<" "<<*it;
    }
    cout<<endl;
    for(rit=s.rbegin();rit!=s.rend();rit++)//////////////记住
    {
    cout<<" "<<*rit;
    }
    return 0;
    }

    8、注意事项:begin() 和 end()函数是不检查set是否为空的,使用前最好使用empty()检验一下set是否为空.

    9、set操作类函数

    <1>insert函数----作用是将一个元素或一系列元素插入到set容器中。其中:

           第一个函数:先判断set中是否存在一个元素y 与 要插入元素x 相等 ,如果不存在,则将x插到适当位置,如果存在,则不插入

           第二个函数:从it开始寻找插入点,寻找有效的插入方法插入元素x

           第三个函数:将指定的元素序列[first,last]插入到set容器中

          对于第一个函数,如果插入成功,则返回pair(it,true);否则,返回pair(it,false).其中 it 迭代器

          对于第二个函数,函数返回新元素插入的位置或者已经存在相同元素的位置

    # include<iostream>
    # include<set>
    using namespace std;
    int main()
    {
    set<int> s; //////////////////声明一个空set类
    set<int>::iterator it; //////////////////////声明一个set类的指针 it
    pair<set<int>::iterator,bool> r;          //用来接收 insert 函数 的返回值
    for(int i=1;i<=3;i++)
    {
    s.insert(i*10);                                       //插入10 20 30

    }
    r = s.insert(30);                                  //r接收 insert(30) 的返回值
    if(r.second==false)                             //r.second 有两个返回值,插入成功返回true   插入失败返回false
    {
    it = r.first;                                      // r.first  表示当前迭代器  指向的位置
    }
    s.insert(it,32);                              //表示从 起始查找位置it  开始寻找 插入位置
    s.insert(19);
    int a[5]={6,20,4};
    s.insert(a,a+3);                       // 20已经存在 不能插入
    for(it=s.begin();it!=s.end();it++)
    {
    cout<<" "<<*it;
    }
    cout<<endl;
    return 0;
    }

    10、

  • 相关阅读:
    MVC设计模式
    NET Core 1.0
    《Nginx文件类型错误解析漏洞--攻击演练》 (转)
    AngularJs 基础(60分钟入门) (转)
    每个线程分配一个stack,每个进程分配一个heap;heap没有结构,因此寻址慢(转)
    声明式编程和命令式编程的比较(转)
    Android SimpleAdapter的参数
    RelativeLayout相对布局
    Tomcat、Apache、IIS这三种Web服务器来讲述3种搭建JSP运行环境的方法
    GitHub已将持续集成服务器Janky开源
  • 原文地址:https://www.cnblogs.com/wshyj/p/6263298.html
Copyright © 2020-2023  润新知