zoukankan      html  css  js  c++  java
  • c++ set的用法

    set集合是c++ stl库中自带的一个容器,set具有以下两个特点:

    1、set中的元素都是排好序的

    2、set集合中没有重复的元素

    常用操作:

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

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

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

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

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

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

    erase(it) 删除迭代器指针it处元素

    insert(a) 插入某个元素 

    #include<stdio.h>
    
    #include<set>
    
    using namespace std;
    
    int main()
    
    {
    
    set<int>s;
    
    s.insert(3);
    
    s.insert(1);
    
    s.insert(2);
    
    s.insert(1);
    
    set<int>::iterator it;
    
    for(it=s.begin();it!=s.end();it++) //使用迭代器进行遍历
    
    {
    
    printf("%d
    ",*it);
    
    }
    
    return 0;
    
    }
    
    //输出结果 : 1 2 3 一共插入了4个数,但是集合中只有3个数并且是有序的,可见之前说过的set集合的两个特点,有序和不重复。
    

      


    当set集合中的元素为结构体时,该结构体必须实现运算符‘<’的重载

    #include<stdio.h>
    
    #include<set>
    
    #include<string>
    
    using namespace std;
    
    struct People
    
    {
    
    string name;
    
    int age;
    
    bool operator <(const People p) const //运算符重载
    
    {
    
    return age<p.age; //按照年龄由小到大进行排序
    
    }
    
    };
    
    int main()
    
    {
    
    set<People>s;
    
    s.insert((People){"张三",14});
    
    s.insert((People){"李四",16});
    
    s.insert((People){"王二麻子",10});
    
    set<People>::iterator it;
    
    for(it=s.begin();it!=s.end();it++) //使用迭代器进行遍历
    
    {
    
    printf("姓名:%s 年龄:%d
    ",(*it).name.c_str(),(*it).age);
    
    }
    
    return 0;
    
    }
    
    /*
    
    输出结果
    
    姓名:王二麻子 年龄:10
    
    姓名:张三 年龄:14
    
    姓名:李四 年龄:16
    
    */
    

      


    可以看到结果是按照年龄由小到大的顺序排列。

    1)由小到大

    set<int,less<int>> M;
    
        M.insert(1960);
    
        M.insert(1952);
    
        M.insert(1771);
    
        M.insert(1812);
    
        M.insert(1960);
    
        M.insert(2000);
    
     
    
        set<int,less<int>>::iterator N= M.begin();
    
        cout<<"Number of elements "<<M.size()<<endl;
    
        cout<<"The elements are:"<<endl;
    
        while(N != M.end())
    
        {
    
           cout<<*N<<endl;
    
           ++N;
    
        }
    

      

     图片

    (2)由大到小:

    set<int,greater<int>> M;

        M.insert(1960);

        M.insert(1952);

        M.insert(1771);

        M.insert(1812);

        M.insert(1960);

        M.insert(2000);

        set<int,greater<int>>::iteratorN = M.begin();

        cout<<"Number of elements "<<M.size()<<endl;

        cout<<"The elements are:"<<endl;

        while(N != M.end())

        {

           cout<<*N<<endl;

           ++N;

        }

    输出结果:

  • 相关阅读:
    Web防止button按钮点击多次
    缓存
    A标签跳转链接并修改样式
    省、市、区 三级联动
    ASP.NET的OnClientClick与OnClick事件
    ASP:CheckBox获取前台的checked的属性
    c#字符串大小写转换
    C# Base64编码
    自定义滚动条样式 -webkit-scrollbar
    代码 三角
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/12876515.html
Copyright © 2011-2022 走看看