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 ;
} 
在 Java 中,遍历 Set 集合可以通过多种方法实现,这些方法包括使用迭代器、增强的 for 循环以及 Stream API。以下是详细的介绍和示例: ### 使用迭代器遍历 迭代器是一种传统的遍历方式,它允许在遍历过程中执行删除操作[^1]。 ```java Set<String> set = new HashSet<>(); // 假设已经向set中添加了一些元素 Iterator<String> it = set.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); } ``` 如果需要在遍历过程中删除特定的元素,可以这样做[^2]: ```java Set<Integer> numberSet = new HashSet<>(); // 添加一些元素到集合 numberSet.add(1); numberSet.add(2); numberSet.add(3); numberSet.add(4); numberSet.add(5); Iterator<Integer> iterator = numberSet.iterator(); while (iterator.hasNext()) { Integer num = iterator.next(); // 删除偶数 if (num % 2 == 0) { System.out.println("Removing: " + num); iterator.remove(); // 在迭代过程中删除元素 } } ``` ### 使用增强的 for 循环 增强的 for 循环提供了一种简洁的方式来遍历 Set 集合,但它不支持在遍历过程中修改集合[^2]。 ```java Set<String> set = new HashSet<>(); // 假设已经向set中添加了一些元素 for (String str : set) { System.out.println(str); } ``` ### 使用 Stream API Java 8 引入了 Stream API,这为处理集合提供了一种非常强大的功能,包括遍历集合[^2]。 ```java Set<String> set = new HashSet<>(); // 假设已经向set中添加了一些元素 set.stream().forEach(System.out::println); ``` 以上就是几种常用的遍历 Set 集合的方法。每种方法都有其适用场景,选择合适的方法取决于具体的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值