STL之set

一.常用用法:
s.begin()    ,返回set容器的第一个元素

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

s.erase()  ,删除一个元素

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

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

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

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

s.rbegin()    ,返回的值和end()相同

s.rend()     ,返回的值和begin()相同

s.count()     ,查找set中某个某个键值出现的次数。(判断某一键值是否出现过)

s.find()     ,返回给定值值得定位器,如果没找到则返回end()。

#include<iostream>
#include<set>
using namespace std;
int main()

{
    set<int> s;//定义一个集合为s
    s.insert(1);//插入
    s.insert(2);
    s.insert(3);
    s.insert(1);
    cout<<"set 的 size 值为:"<<s.size()<<endl;
    cout<<"set 的包含的最大值为:"<<s.max_size()<<endl;
    cout<<"set 中第一个元素为:"<<*s.begin()<<endl;
    cout<<"set 中的最后一个元素是:"<<*s.end()<<endl;
    cout<<"set 中 1 出现的次数是 :"<<s.count(1)<<endl;
    cout<<"set 中 2 出现的次数是 :"<<s.count(2)<<endl;
    cout<<"set 中 4 出现的次数是 :"<<s.count(4)<<endl;
    s.clear();//清空
    if(s.empty())//判断是否为空
        cout<<"set 为空"<<endl;
    cout<<"set 的 size 值为:"<<s.size()<<endl;
    cout<<"set 的包含的最大值为:"<<s.max_size()<<endl;
    int a[] = {6,5,4,3,2,1};
    set<int> ss(a,a+6);
    set<int>::iterator iter;
    if((iter = ss.find(2)) != ss.end())
    {
        cout<<*iter<<endl;
    }
    return 0;
}

结果

setsize 值为:3
set 的包含的最大值为:214748364
set 中第一个元素为:1
set 中的最后一个元素是:3
set1 出现的次数是 :1
set2 出现的次数是 :1
set4 出现的次数是 :0
set 为空
setsize 值为:0
set 的包含的最大值为:214748364
2

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

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

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

#include <iostream>
#include <set>
using namespace std;

int main(){
    set<int> s;
    s.insert(1);
    s.insert(2);
    s.insert(5);

    cout << "lower_bound & upper_bound test:" << endl;

    cout << "第一个大于或等于3的元素: " << *s.lower_bound(3) << endl;
    cout << "第一个大于或等于2的元素: " <<*s.lower_bound(2) << endl;
    cout << "第一个大于2的元素: " <<*s.upper_bound(2) << endl;

    cout << "equal_range test:" << endl;

    cout << "第一个大于或等于2的元素: " <<  *s.equal_range(2).first << endl;
    cout << "第一个大于2的元素: " << *s.equal_range(2).second << endl;
    return 0;
}

结果

lower_bound & upper_bound test:
第一个大于或等于3的元素: 5
第一个大于或等于2的元素: 2
第一个大于2的元素: 5
equal_range test:
第一个大于或等于2的元素: 2
第一个大于2的元素: 5

三.自定义比较函数
(1)元素不是结构体:
自定义比较函数myCmp,重载“()”操作符

struct myCmp
        {
            bool operator()(const your_type &a,const your_type &b)
            {
                return a.data-b.data>0;
            }
        }
        set<int,myCmp>s;
        ......
        set<int,myCmp>::iterator it;

(2)如果元素是结构体,可以直接将比较函数写在结构体内。

struct Info
{
    string name;
    float score;
    //重载“<”操作符,自定义排序规则
    bool operator < (const Info &a) const
    {
        //按score从大到小排列
        return a.score<score;
    }
}        
set<Info> s;
......
set<Info>::iterator it;

后来补充:如何输出set内的内容

set<string>::iterator it; //定义迭代器
for(it = s.begin();it != s.end();it++)
cout<<*it<<endl;//输出it要加“*”

感谢耀辰大佬教我用迭代器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值