set

set

翻译为集合,是一个内部自动有序不含重复元素的容器,在使用时需加上 set 头文件,即 #include <set>,并在头文件下加上 “using namespace std;”。

1. set 的定义

set<typename> name;

即:set 数据类型 名称
typename 可以是任何基本类型,例如 int, char, double, 结构体, STL 容器。
大部分 STL 都是这样定义的。

2. set 容器内元素的访问

set 只能通过迭代器(iterator)访问:

set<typaname>::iterator it;

由于除开 vector 和 string 之外的 STL 容器都不支持*(it+i)的访问方式,因此只能按以下方式枚举:

///set容器实现元素自动递增排序且自动去除重复元素 
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	st.insert(3) ;
	st.insert(5) ;
	st.insert(2) ;
	st.insert(3) ;	
	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {	
	//不支持it < st.end()的写法 
		printf ("%d ", *it) ; 
	}	
	return 0 ; 
} 

3. set 常用函数实例解析

(1) insert()

//insert():将 x 插入 set 容器中,并自动递增排序且去除重复元素
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	st.insert(3) ;
	st.insert(5) ;
	st.insert(2) ;
	st.insert(3) ;	
	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {	
	//不支持it < st.end()的写法 
		printf ("%d ", *it) ; 
	}	
	return 0 ; 
}  

(2) find()

//find(value):返回 set 中对应值为 value 的迭代器(即在其中是第几个元素)
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	for (int i = 1; i <=3; i++) {
		st.insert(i) ;
	}
	set<int>::iterator it = st.find(2) ;
	printf ("%d\n", *it) ;
	//以上两句可直接写成 printf ("%d\n", *(st.find(2))) 
	return 0 ;
} 

(3) erase()

i) 删除单个元素

  • st.erase(it):it 为 find(value) 找到要删除元素的迭代器
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	st.insert(100) ;
	st.insert(200) ;
	st.insert(300) ;
	st.erase(st.find(100)) ;
	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
		printf ("%d ", *it) ;
	}
	return 0 ;
}
  • st.erase(value):直接删除 set 中值为 value 的元素
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	st.insert(100) ;
	st.insert(200) ;
	st.insert(100) ;
	st.erase(100) ;
	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
		printf ("%d ", *it) ;
	}
	return 0 ;
}

ii) 删除一个区间内的所有元素

//删除区间 [first, last] 内元素:st.erase(first, last+1)
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	st.insert(2) ;
	st.insert(1) ;
	st.insert(4) ;
	st.insert(3) ;
	st.erase(st.find(3), st.end()) ;
	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
		printf ("%d ", *it) ;
	} 
	return 0 ;
}

(4) size()

//size():获得 set 内元素的个数
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	st.insert(1) ;
	st.insert(2) ;
	st.insert(3) ;
	st.insert(4) ;
	printf ("%d", st.size()) ;
	return 0 ; 
}

(5) clear()

//clear():用以清空 set 中的所有元素
#include <cstdio>
#include <set>
using namespace std;
int main () {
	set<int> st ;
	for (int i = 1; i <=4; i++) {
		st.insert(i) ;
	}
	st.clear() ;
	printf ("%d", st.size()) ;
	return 0 ;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值