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;

        }

    输出结果:

  • 相关阅读:
    Java开发桌面程序学习(12)——Javafx 悬浮窗提示 tooptip
    Java开发桌面程序学习(11)——javafx 鼠标点击,右击,双击
    Web前端—— JQuery迷你版实现以及使用
    Web前端——表单提交和Js添加选项
    Web前端——JavaScript练习
    Web前端——JavaScript笔记
    <亲测>CentOS7中使用yum安装Nginx的方法
    Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录?
    <亲测>centos安装 .net core 2.1
    <亲测>CentOS7 安装mysql8.0(YUM方式)
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/12876515.html
Copyright © 2011-2022 走看看