【STL】C++ 集合 set

集合 set

  • 元素默认自动由小到大排序

  • 元素不重复

  • 添加头文件

#include<set>

1.set容器的创建

#include<set>
#include<functional>

set<int> seta;	//默认由小到大排序
set<int, greater<int> > setb; //默认降序排序,需包含头文件functional

2.元素输出

  • 迭代器 iterator,类似指针。
  • 代码模板
for(set<int>::iterator it=a.begin();it!=a.end();it++){
   	cout<<*it<<" ";
 }
  • 示例代码
#include <iostream>
#include<set>
#include<functional>

using namespace std;

int main()
{
    set<int> a;	//升序排序
    set<int,greater<int> > b;	//降序排序

    for(int i=1;i<11;i++){
        a.insert(i);
        b.insert(i);
    }
	
	//输出
    for(set<int>::iterator it=a.begin();it!=a.end();it++){
        cout<<*it<<" ";
    }
    cout<<endl;
    for(set<int>::iterator it=b.begin();it!=b.end();it++){
        cout<<*it<<" ";
    }
}

输出为:
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1

Process returned 0 (0x0) execution time : 0.030 s
Press any key to continue.

3.set容器的常用函数

//返回set容器的第一个元素
s.begin()      

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

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

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

//插入一个元素
s.insert()      

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

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

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

//元素 1出现的次数
s.count(1)       

4.set容器的增删改查

  • 插入 insert()
//插入单个元素
s.insert(1);	

//插入区间元素
int a[4] = {1,2,3,4};
s.insert(a,a+4); //将区间[a, a+4]里的元素插入容器
  • 删除 erase() 、 clear()
set<int>::iterator ita = s.begin();
set<int>::iterator itb = s.begin();
s.erase(ita);       //删除一个元素
s.erase(ita,itb);	//删除区间[ita,itb)的元素,不包括itb
erase(key_value);   //删除键值key_value的值

s.clear()       //删除set容器中的所有的元素
  • 查找 find() - 返回的是定位器
//查找一个元素,如果容器中不存在该元素,返回值等于s.end()
s.find()       

if(s.find(2) != s.end()) 
    cout << "2 is existent" << endl;
else 
    cout << "2 is non-existent" << endl;
  • 修改
set<int>::iterator it=a.begin();
*it++;
cout<<*it<<endl;

5.lower_bound() & upper_bound()

  • 当创建set容器 默认升序排序时
    lower_bound 大于等于
    upper_bound 大于
#include<set>
set<int> a;
for(int i=1;i<11;i++){
	a.insert(i);
}

cout<<*a.lower_bound(3);	//返回第一个 ≥ 3 的定位器的取值
cout<<*a.upper_bound(3);	//返回第一个 > 3 的定位器的取值
  • 当创建set容器 降序排序时
    lower_bound 小于等于
    upper_bound 小于
#include<set>
#include<functional>
set<int,greater<int> > b;
for(int i=1;i<11;i++){
	a.insert(i);
}

cout<<*a.lower_bound(3);	//返回第一个 ≤ 3 的定位器的取值
cout<<*a.upper_bound(3);	//返回第一个 < 3 的定位器的取值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值