C++中set的用法

set集合是c++ STL库中自带的一个容器,set具有以下两个特点:

1、set中的元素都是排好序的
2、set集合中没有重复的元素

set的特性是所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。

set的各成员函数列表:

1. begin()–返回指向第一个元素的迭代器
2. clear()–清除所有元素
3. count()–返回某个值元素的个数
4. empty()–如果集合为空,返回true
5. end()–返回指向最后一个元素的迭代器
6. equal_range()–返回集合中与给定值相等的上下限的两个迭代器
7. erase()–删除集合中的元素
8. find()–返回一个指向被查找到元素的迭代器
9. get_allocator()–返回集合的分配器
10. insert()–在集合中插入元素
11. lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
12. key_comp()–返回一个用于元素间值比较的函数
13. max_size()–返回集合能容纳的元素的最大限值
14. rbegin()–返回指向集合中最后一个元素的反向迭代器
15. rend()–返回指向集合中第一个元素的反向迭代器
16. size()–集合中元素的数目
17. swap()–交换两个集合变量
18. upper_bound()–返回大于某个值元素的迭代器
19. value_comp()–返回一个用于比较元素间的值的函数

#include<set>    
#include<iostream>    
using namespace std;
int main()
{
    set<int>s;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        s.insert (x);
    }
    set<int>::iterator it;
    for(it=s.begin ();it!=s.end ();it++)
    {
        printf("%d\n",*it); 
    }
    
    //s.end()没有值
     cout<<"s.begain()   "<<*s.begin ()<<endl;
    //lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
    cout<<"lower_buond  3  "<<*s.lower_bound (3)<<endl;
    
    //upper_bound()--返回大于某个值元素的迭代器
    cout<<"upper_bound  3  "<<*s.upper_bound (3)<<endl;

    //find()--返回一个指向被查找到元素的迭代器
    cout<<"find()  3   "<<*s.find (3)<<endl;

    cout<<"s.size()  "<<s.size ()<<endl;
    return 0;
}

set t ------ 定义一个int类型的容器,(默认)里面元素从小到大
set<int, greater > t ------ 定义一个int类型的容器,里面元素从大到小

想遍历set里的元素或进行进一步修改,必须定义对应迭代器,以下三种定义方法(迭代器类似于指针)
set::iterator it ------ 定义正向迭代器
set::reverse_iterator rit; ------ 定义反向迭代器
auto it = t.begin(); ------ 因t.begin()返回正向迭代器,所以it自动被定义为正向迭代器,可适应其他所有操作

t.begin() ------ 返回set中第一个元素,类型为正向迭代器

t.rbegin() ------ 返回set中最后一个元素,类型为反向迭代器

t.end() ------ 返回set中最后一个元素,类型为正向迭代器

t.rend() ------ 返回set中第一个元素,类型为反向迭代器

t.find(k) ------ 寻找k,若找到返回对应的迭代器,否则返回end();

t.insert(a, b) ------ 插入指针[a, b)之间的元素,已有元素不会再次插入

t.erase(it) ------ 删除迭代器it对应的元素

t.erase(l, r) ------ 删除迭代器[l, r)之间的元素

lower_bound(k) ------ 返回第一个大于等于k的元素的迭代器

upper_bound(k) ------ 返回第一个大于k的元素的迭代器

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值