プログラミング道場 ACM/ICPC

集合演算

最終更新:

kit

- view
だれでも歓迎! 編集
/*
	template<class _InIt1, class _InIt2, class _OutIt>
	_OutIt set_union(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest )

	template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
	_OutIt set_union(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest, _Pr _Pred )

	template<class _InIt1, class _InIt2, class _OutIt>
	_OutIt set_intersection(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest )

	template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
	_OutIt set_intersection(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest, _Pr _Pred )

	template<class _InIt1, class _InIt2, class _OutIt>
	_OutIt set_difference(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest )

	template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
	_OutIt set_difference(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest, _Pr _Pred )

	template<class _InIt1, class _InIt2, class _OutIt>
	_OutIt set_symmetric_difference(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest )

	template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
	_OutIt set_symmetric_difference(
		_InIt1 _First1, _InIt1 _Last1,
		_InIt2 _First2, _InIt2 _Last2,
		_OutIt _Dest, _Pr _Pred )

*/

#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
	//ソートされている必要がある
	int a[] = { 1,2 };
	int b[] = { 2,3 };

	//結果を格納する配列は十分な大きさがなければいけない
	int r[4];
	int* last;

	//和集合 a∪b = {1,2,3}
	last = set_union( a,a+2, b,b+2, r );
	copy( r, last, ostream_iterator<int>(cout,",") );
	cout << endl;

	//積集合 a∩b = {2}
	last = set_intersection( a,a+2, b,b+2, r );
	copy( r, last, ostream_iterator<int>(cout,",") );
	cout << endl;

	//差集合 a-b = {1}
	last = set_difference( a,a+2, b,b+2, r );
	copy( r, last, ostream_iterator<int>(cout,",") );
	cout << endl;

	//差集合 b-a = {3}
	last = set_difference( b,b+2, a,a+2, r );
	copy( r, last, ostream_iterator<int>(cout,",") );
	cout << endl;

	//対称差 aΔb = {1,3}
	last = set_symmetric_difference( a,a+2, b,b+2, r );
	copy( r, last, ostream_iterator<int>(cout,",") );
	cout << endl;

 	return 0;
}
人気記事ランキング
ウィキ募集バナー