集合是多个元素聚集在一起的数据结构,集合的特点是里面的元素唯一、不会重复,可以用这一点来进行去重。
C++
C++中的集合是set。其中的元素唯一而且自动有序。另有一个集合是unordered_set,唯一区别在于set会内部自动排序,而unordered_set不会。set的定义格式为:set name; typename可以是任何基本类型,例如 int、double、char、vector、set等。
下面以set为例。
// 需要#include <set>
set<int> s; // 定义set
// 增加元素
s.insert(5); // 插入单个元素
s.insert(3);
s.insert(7);
// 删除元素
set<int>::iterator it;
it = s.find(5);
s.erase(it); // 通过迭代器来删除单个元素
s.erase(5); // 通过值来删除单个元素
s.erase(it, s.end()); // 通过迭代器范围来删除多个元素
s.clear(); // 删除所有元素
// 查找元素
int flag = s.count(5); // 通过.count()来查找是否含有某个元素
it = s.find(5); // 通过.find()返回迭代器
if (it != s.end()) // 迭代器和.end()对比
cout<<"has 5"<<endl;
// 其他
bool flag = s.empty(); // 判断集合是否为空
int sLen = s.size(); // 获取集合元素个数
// 通过基于范围的for循环遍历
for(auto a:s)
cout<<a<<' ';
// 通过迭代器遍历
for(set<int>::iterator it=s.begin(); it!=s.end(); it++)
cout<<*it<<' ';
Java
Java中的集合是HashSet。基于HashMap实现,内部不允许有重复元素,并且内部自动排序(数值按大小排序,字符串按字典序排序),下面以整数为例(也可以是String、Float等):
// **需要import java.util.HashSet;**
HashSet<Integer> s = new HashSet<Integer>(); // 创建对象
s.add(5); // 添加元素
s.add(3);
s.add(7);
s.add(3); // 重复的元素不会被添加
s.remove(7); // 删除元素,成功返回true,否则为false
s.clear(); // 删除所有元素
boolean flag = s.contains(5); // 测试s是否包含5
boolean flag2 = s.isEmpty(); // 测试s是否为空
int sz = s.size(); // 获取s的元素数目
// 遍历s
for (Integer i: s){
System.out.println(i);
}
Python
Python中的集合是set。不允许存在重复的元素,可用来自动去重。
# 初始化
s = set() # 创建空列表
s = {1,2,3,"hello",2.5} # 初始化方式一,列表里可以有多种类型的元素
s = set([1,2,3,"hello",2.5]) # 初始化方式二
s = {6,3,5.2,8,1,3.5} # 如果列表里全是数值,会自动升序排列
# 增删查
s.add(e) # 添加元素e,可以是数字/字符/元素/列表等
s.remove(e) # 删除元素e,如果e不存在则报错
s.discard(e) # 尝试删除元素e,e不存在也不会报错
s.clear() # 删除列表中所有元素
print(3 in s) # 查询集合中是否有某个元素
print(len(s)) # 查询集合元素个数
# 集合间的运算
a = {1,2,3,4}
b = {3,4,5,6}
t = a|b # 并集:t=={1,2,3,4,5,6}
t = a&b # 交集:t=={3,4}
t = a-b # 差集:t=={1,2}
t = a^b # 对称差:t=={1,2,5,6}