set学习小记

set属于STL里的关联式容器,满足集合的互异性,会自动排序,默认从小到大,

如果set的元素是结构体,排序,需对()重载

 

#include<iostream>
#include<set>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    set<int,greater<int> > a,b; //默认从小到大,加一个greater<int>就成了从大到小排序,这点和优先队列不一样 
    int i,j,k,t,n,m;
    //
    
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>j;
        a.insert(j);
    }
    cout<<"事实证明set会自动排序,默认是从小到大,而且满足互异性"<<endl;
    
    for(set<int>::iterator id=a.begin();id!=a.end();id++)
    cout<<*id<<" ";
    cout<<endl;
    
    cout<<"增:"<<endl;
    a.insert(999);
    a.insert(89);
    for(set<int>::iterator id=a.begin();id!=a.end();id++)
    cout<<*id<<" ";
    cout<<endl;
    
    cout<<"查:"<<endl;
    if(a.count(89)==1)
    cout<<"YES"<<endl;
    else
    cout<<"NO"<<endl;
    if(a.find(999)!=a.end())
    cout<<"YES"<<endl;
    else
    cout<<"NO"<<endl;
    

 

 


    //set的独特之处
    cout<< *(a.lower_bound(15))<<endl; //返回第一个大于15的数的地址 切记,它返回的是迭代器 
    cout<< *(a.upper_bound(25))<<endl;  //返回最后一个大于15的数的地址 
    //对诸如set、map这种关键字唯一的集合而言,lower_bound、upper_bound返回迭代器是相同,关键字val在集合中不存在,二者返回结果一样,
    //对multiset、multimap这类关键字不唯一的集合而言。按照关键字后面一个关键字在集合中出现的次数可分为:关键字val出现在集合中,但是是唯一的,这种情况和set、map情况类似;关键字val出现在集合中,出现多次,这种情况下lower_bound返回第一个出现关键字val对应的迭代器,upper_bound返回位于关键字val对应位置后第一个不是val的位置的迭代器;关键字val不在集合中,这种情况下与set、map一致。
  

 

 

 cout<<"删"<<endl;
    a.erase(a.begin());           
    cout<<*(a.begin())<<endl;
    cout<<a.size()<<endl;
    a.clear();
    cout<<a.size()<<endl;
     
    
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值