差集操作
一、集合的定义
语法:set <类型> 变量;
案例:
set<int> number1,number2;
二、往集合中插入元素
语法:insert(元素);
案例:
number1.insert(1);
三、求差集
语法 set_intersection(setA.begin(), setA.end(),setB.begin(),setB.end(),insert_iterator<set<元素类型>>(setResult, setResult.begin()));
就是求setA和setB两个集合的交集,结果放到setResult中。
/**
template <typename T>
std::set<T> diff_cmp(std::set<T> &first, std::set<T> &second)
{
std::set<T> diff;
/* 求两个集合差集 */
std::set_difference(first.begin(), first.end(), second.begin(),
second.end(), std::insert_iterator<std::set<T>>(diff, diff.begin()));
return diff;
}
四、集合遍历
关键是要声明迭代器变量,遍历方法与数组类似,可以用while循环也可以用for循环,但用for循环时条件运算符不能用 <,而用 != 进行判断,还特别需要注意指针运算符。
#include<iostream>
#include<set>
using namespace std;
set<int>all;
int main()
{
//生成待处理的数据
for(int i=0;i<100;i++)
all.insert(i);
//遍历set,用迭代器类型
for(set<int>::iterator i=all.begin();i!=all.end();i++)
cout<<*i<<endl; //注意指针运算符
return 0;
}
五、集合查找
五、查找某个元素是否在集合中
语法:find(元素);
注意:当find的结果返回值等于end()时就表示元素没在集合中。
案例:
if(number1.find(99)== number1.end())
printf("99不在集合中\n");
else printf("99在集合中\n");
六、求交集
语法:set_intersection(setA.begin(), setA.end(),setB.begin(),setB.end(),insert_iterator<set<元素类型>>(setResult, setResult.begin()));
就是求setA和setB两个集合的交集,结果放到setResult中。
template <typename T>
std::set<T> intersect_cmp(std::set<T> &first, std::set<T> &second)
{
std::set<T> diff;
/* 求两个集合差集 */
std::set_intersection(first.begin(), first.end(), second.begin(),
second.end(), std::insert_iterator<std::set<T>>(diff, diff.begin()));
return diff;
}