哈希值太大,用集合

1.集合的概念

(1)set内部元素自动排序

(2)set内部唯一,无重复元素

2.相关操作

(1)set的定义

//使用set需要加入头文件#include<set>
set<int> s;
set<int> s{1,2,3,4,5};
set<int> s(s1); //拷贝s1
set<int> s(v.begin(), v.end()); //v是相同类型的数组

(2)读取数据

for (int i:s) {
    count<<i;

(3)增、删、查

//插入
s.insert(n);

//删除
s.erase(n); //删除某一元素
s.erase(v.begin(), v.end());  //删除v中的元素
s.clear(); //清空集合

//查找
s.count(n); //集合元素唯一,所以count只能返回0或1,1即存在,否则不存在
s.find(n); //返回一个指向被查找元素的迭代器

s.size(); //求集合的大小

(4)集合运算

//集合运算方法需要头文件#include<algorithm>

//集合的交集,结果保存在c中
set_intersection(A.begin(), A.end(), B.begin(), B.end(), inserter(C, C.begin()));

//集合的并集
set_union(A.begin(), A.end(), B.begin(), B.end(), inserter(C, C.begin()));

//差集
set_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(C, C.begin()));

给定两个数组,编写一个函数来计算它们的交集。

法1:

//Solution1--直接用set 
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
	set<int> s1(nums1.begin(), nums1.end());
	set<int> s2(nums2.begin(), nums2.end());
	set<int> s3;
	set_intersection (s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(c,c.bedin()));
	return vector<int> a(s3.begin(), s3.end());
}

法2:

//Solution2--用哈希表
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
	unordered_set<int> result;
	unordered_set<int> s1(nums1.begin(), nums1.end());
	for(int num : nums2) {
		if (s1.find(num) != s1.end()) {
			result.insert(num);
		}
	}
	return vector<int>(result.begin(), result.end());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值