zoukankan      html  css  js  c++  java
  • set学习(系统的学习)

    set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。

    下面介绍set的常用操作:

    1:注意包含头文件<set>

    set只有自加和自减运算!!!

    s.begin()    返回set容器的第一个元素的地址

    s.end()    返回set容器的最后一个元素之后的地址

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

    s.empty()    判断set容器是否为空

    s.insert()   插入一个元素

    s.erase()   删除一个元素

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

    具体看代码:

    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {
        set<int> s;//创建一个set对象
        for(int i=0;i<3;i++)
            s.insert(i+10);//插入三个元素,10 11 12
        cout<<*s.begin()<<endl;//输出第一个元素10
        cout<<*(--s.end())<<endl;//输出最后一个元素
        s.erase(s.begin());//删除第一个元素
        cout<<*s.begin()<<endl;//第一个元素变为11
        cout<<s.size()<<endl;//答案为2
        s.clear();//清空所有元素
        cout<<s.size()<<endl;//输出为0
        return 0;
    }

    迭代器的使用:

    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {
        set<int> s;//创建一个set对象
        for(int i=0;i<3;i++)
            s.insert(i+10);//插入三个元素,10 11 12
        set<int>::iterator it;//创建一个迭代器
        for(it=s.begin();it!=s.end();it++)//用迭代器进行遍历
            cout<<*it<<" ";
        cout<<endl;
        it=s.begin();
        it++;
        s.erase(it);//用迭代器进行删除操作
        for(it=s.begin();it!=s.end();it++)//用迭代器进行遍历
            cout<<*it<<" ";
        cout<<endl;
        return 0;
    }

    修改:不能修改容器内数据,所以只能删除某元素再插入要修改的数值

    查找:s.find()

    如果容器内不存在该元素,返回值等于s.end();

    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {
        set<int> s;//创建一个set对象
        for(int i=0;i<3;i++)
            s.insert(i+10);//插入三个元素,10 11 12
        set<int>::iterator it;//创建一个迭代器
        for(it=s.begin();it!=s.end();it++)//用迭代器进行遍历
            cout<<*it<<" ";
        cout<<endl;
        if(s.find(10)!=s.end()) cout<<"yes"<<endl;
        return 0;
    }

    set的其它常用操作:

    s.lower_bound() 返回第一个大于或等于给定关键值的元素

    s.upper_bound() 返回第一个大于给定关键值的元素

    s.equal_range() 返回一对定位器,分别表示 第一个大于或等于给定关键值的元素 和 第一个大于给定关键值
    的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于
    s.end()

    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {
        set<int> s;//创建一个set对象
        for(int i=0;i<3;i++)
            s.insert(i+10);//插入三个元素,10 11 12
        cout<<*s.lower_bound(10)<<endl;//输出10
        cout<<*s.upper_bound(10)<<endl;//输出11
        cout<<*s.equal_range(10).first<<endl;//10
        cout<<*s.equal_range(10).second<<endl;//11
        return 0;
    }

    如果要把set定义为降序:可以如下定义:

    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {
        set<int,greater<int> >s;
        for(int i=0;i<3;i++)
            s.insert(i+10);
        set<int>::iterator it;
        //降序输出
        for(it=s.begin();it!=s.end();it++) cout<<*it<<endl;
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    I
    H
    装箱问题
    E
    Oracle创建视图(View)
    (转)Navicat Premium 12.1.8.0安装与激活
    bigdecimal 保留小数位
    用命令修改Oracle数据库密码
    sql中exists,not exists的用法
    在Orcl中通过SQL语句修改创建表
  • 原文地址:https://www.cnblogs.com/caijiaming/p/9911028.html
Copyright © 2011-2022 走看看