• STL set 详细用法


    一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。

    用到的库

    #include <set>

    定义

    最简单:

    set<int> a;

    set和其他的stl一样,都支持自定义。

    因为set会自动将元素从小到大排序,所以我们可以设定它的比较函数,这里与优先队列十分相似。

    法1 利用自定义比较函数:

    #include<stdio.h>
    #include<set>
    #include<string>
    using namespace std;
    struct People
    {
        string name;
        int age;
    };
    
    struct cmp {
        bool operator  ()(People a, People b)
        {
            if(a.name==b.name)return false;
            return a.age<b.age;       //按照年龄由小到大进行排序
        }
    };
     
    
    set<People,cmp>s;

    法2 运算符重载

    #include<stdio.h>
    #include<set>
    #include<string>
    using namespace std;
    struct People
    {
        string name;
        int age;
        bool operator <(const People p) const  //运算符重载
        {
            if(name==p.name)return false;//按名字去重
            return age<p.age;       //按照年龄由小到大进行排序
        }
     
    };
    
    set<People>s;

    法3 友元函数

    #include<bits/stdc++.h>
    
    using namespace std;
    
    struct People
    {
        string name;
        int age;
        friend bool operator <(const People & a,const  People & b)
        {
            if(a.name==b.name)return false;//按名字去重
            return a.age<b.age;       //按照年龄由小到大进行排序
        }
     
    };
    
    set<People>s;

    遍历

    也是需要一个迭代器进行访问:

    set<People>::iterator it;
    for(it=s.begin();it!=s.end();it++)  
    {
        printf("姓名:%s 年龄:%d
    ",(*it).name.c_str(),(*it).age);
    }

    访问set的值需要采用*t的方式。

    其他用法:

    begin();                        第一个元素地址
    clear();                         清楚set容器
    count(x);                      x元素的个数
    empty();                       是否为空
    end();                           最后一个元素后面一个的地址
    erase(x);                      删除元素x
    find(x);                         查找元素x,返回地址,若没有则返回end
    insert(x);                      增加元素x
    size();                           元素个数

  • 相关阅读:
    Android开源库
    银行卡的数字检測
    hdu4941 Magical Forest
    android之检測是否有网络
    在Oracle数据库中使用NFS,怎样调优?
    centos+nginx+php-fpm+php include fastcgi_params php页面能訪问但空白,被fastcgi_params与fastcgi.conf害慘了
    漫谈反射
    Android 四大组件学习之BroadcastReceiver二
    【LeetCode】two num 利用comparable接口 对对象进行排序
    扩展功能==继承?
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/11324742.html
Copyright © 2020-2023  润新知