< set >的集合操作函数
函数原型模板:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
具体函数:
- 求两个集合A、B的并集:set_union
- 求两个集合A、B的交集:set_intersection
- 求两个集合A、B的差集:set_difference
- 求两个集合A、B的对称差集:set_symmetric_difference
A∪B={x|x∈A∨x∈B}
A ∩ B={x|x∈A∧x∈B}
A - B={x|x∈A∧x不属于 B}
//举例
set_union(A.begin(),A.end(),B.begin(),B.end(),inserter(C,C.begin());
set_union(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator<int>(cout," "));
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
set<int> a;
set<int> b;
for(int i=0;i<10;i++){
a.insert(i);
}
for(int i=4;i<13;i++){
b.insert(i);
}
set<int> c;
set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin()));
for(set<int>::iterator it=c.begin();it!=c.end();it++){
cout<<*it<<' ';
}
return 0;
}
//输出:0 1 2 3 4 5 6 7 8 9 10 11 12
#include <iostream>
#include <set>
#include <iterator>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
set<int> a;
set<int> b;
for(int i=0;i<10;i++){
a.insert(i);
}
for(int i=4;i<13;i++){
b.insert(i);
}
set<int> c;
set_union(a.begin(),a.end(),b.begin(),b.end(),ostream_iterator<int>(cout," "));
return 0;
}
//输出:0 1 2 3 4 5 6 7 8 9 10 11 12
可通过宏定义简化参数调用
#include <iostream>
#include <set>
#include <cstring>
#include <cstdio>
using namespace std;
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
int main(int argc, char** argv) {
set<int> a;
set<int> b;
for(int i=0;i<10;i++){
a.insert(i);
}
for(int i=4;i<13;i++){
b.insert(i);
}
set<int> c;
set_symmetric_difference(ALL(a),ALL(b),INS(c));
for(set<int>::iterator it=c.begin();it!=c.end();it++){
cout<<*it<<' ';
}
return 0;
}
//输出:0 1 2 3 10 11 12