set讲解


set中几个常用的函数

1)size()    返回当前set中元素的个数;

2)begin()  返回set第一个元素的地址;

3)end()    返回set最后一个元素的地址;

4)clear()   清空set;

5)empty()     判断set 是否为空

6) max_size()    返回set中可能包含的元素最大个数

7)rbegin()    返回值和end()相同;

8)rend()    返回值和rbegin()相同;

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

int main()
{
    set <int> s;
    s.insert(1);
    s.insert(2);
    s.insert(3);
    s.insert(1);
    cout<<"set 的 size 值为"<<s.size()<<endl;
    cout<<"set 的 maxsize 值为"<<s.max_size()<<endl;
    cout<<"set 的第一个元素是"<<*s.begin()<<endl;//begin(),end()返回的都是一个迭代器
    cout<<"set 的最后一个元素是"<<*s.end()<<endl;
    s.clear();//清空set
    return 0;
}
count()  用来查找set中某个键值出现的次数  由于set 中不允许重复的值 所以count()的返回值只有0,1;

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

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set <int> s;
    set <int>::iterator iter;
    for(int i=1;i<=5;i++)
    {
        s.insert(i);
    }
    for( iter=s.begin();iter!=s.end();++iter)
        cout<<*iter<<" ";
    cout<<endl;
    pair<set<int>::const_iterator,set<int>::const_iterator> pr;
    pr=s.equal_range(3);
    cout<<"第一个大于等于3的数是  "<<*pr.first<<endl;
    cout<<"第一个大于3的数是  "<<*pr.second<<endl;
    return 0;
}

erase(iterator)  ,删除定位器iterator指向的值

erase(first,second),删除定位器first和second之间的值

erase(key_value),删除键值key_value的值

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int > s;
    set<int >::const_iterator iter;
    set<int >::const_iterator first;
    set<int >::const_iterator second;
    for(int i=1;i<=10;i++)
        s.insert(i);
    s.erase(s.begin());//第一种删除;
    first = s.begin();
    second =s.begin();
    second++;
    second++;
    s.erase(first,second);//第二种删除
    s.erase(8);//第三种删除
    cout<<"删除后set中的元素是"<<endl;
    for(iter=s.begin(); iter!=s.end(); iter++)
    {
        cout<<*iter<<" ";
    }
    cout<<endl;
    return 0;
}

小结:set中的删除操作是不进行任何的错误检查的,比如定位器的是否合法等等,所以用的时候自己一定要注意。

find()   返回给定值的迭代器 ,如果没有找到返回end();

#include <iostream>
#include <set>
using namespace std;
int main()
{
    int a[]={1,2,3};
    set<int >s(a,a+3);
    set<int >::iterator iter;
    if((iter=s.find(2))!=s.end())
        cout<<*iter<<endl;
    return 0;
}

1)insert(key_value); 将key_value插入到set中 ,返回值是pair<set<int>::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。

2)inset(first,second);将定位器first到second之间的元素插入到set中,返回值是void.

#include <iostream>
#include <set>
using namespace std;
int main()
{
    int a[]={1,2,3};
    set<int >s;
    set<int >::iterator iter;
    s.insert(a,a+3);
    for(iter=s.begin();iter!=s.end();iter++)
        cout<<*iter<<" ";
    cout<<endl;
    pair<set<int >::iterator,bool> pr;
    pr=s.insert(5);
    if(pr.second)
    {
        cout<<*pr.first<<endl;
    }
    return 0;
}

lower_bound(key_value) ,返回第一个大于等于key_value的迭代器

upper_bound(key_value),返回最后一个大于key_value的迭代器

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int >s;
    int a[]={1,3,4};
    s.insert(a,a+3);
    cout<<*s.lower_bound(2)<<endl;//第一个大于等于key_value;
    cout<<*s.lower_bound(3)<<endl;
    cout<<*s.upper_bound(3)<<endl;//最后一个大于等于key_value;
    return 0;
}






评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值