STL set 详细用法

Posted dyhaohaoxuexi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n",(*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();                           元素个数

以上是关于STL set 详细用法的主要内容,如果未能解决你的问题,请参考以下文章

STL —— map用法及实例详解(超详细完整)

C++中STL用法超详细总结(收藏级)

map的常用用法详解

java中for ..each 循环 的详细用法 举个例子

select函数详细用法解析

STL set 用法