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());
}