C++ 中set容器利用内置算法求差集、交集、并集
网上很多例子都是vector举例的,set容易、map容器也可以,用一个插入迭代器的inserter函数就可以,特此记录
void myPrint(int val)
{
cout << val << " ";
}
void test01() {
// 二者排序顺序必须相等,且谓词必须和交集、差集、并集的谓词保持一致
set<int> s1,s2,s3,s4,s5;
//set<int,greater<int>> s1,s2, s3, s4, s5;
// 不能是下面的顺序
//set<int> s1, s3, s4, s5;
//set<int, greater<int>> s2;
s1.insert(10);
s1.insert(20);
s1.insert(30);
s2.insert(30);
s2.insert(40);
s2.insert(50);
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s4, s4.begin()));
set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s5, s5.begin()));
//set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()), greater<int>());
//set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s4, s4.begin()), greater<int>());
//set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s5, s5.begin()), greater<int>());
for_each(s1.begin(), s1.end(), myPrint); cout << endl;
for_each(s2.begin(), s2.end(), myPrint); cout << endl;
for_each(s3.begin(), s3.end(), myPrint); cout << endl;
for_each(s4.begin(), s4.end(), myPrint); cout << endl;
for_each(s5.begin(), s5.end(), myPrint); cout << endl;
}