集合(C++的set、Java的HashSet、Python的set)

文章目录

集合是多个元素聚集在一起的数据结构,集合的特点是里面的元素唯一、不会重复,可以用这一点来进行去重。

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}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值