set_union

[機能]

  系列 1 ,または,系列 2 に含まれる要素の集合を出力します.なお,2 つの系列は前もってソートしておく必要があります.2 引数の比較関数を指定することも可能です(下の表現).

[形式]
	#include <algorithm>
	#include <functional>

	template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);
	template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp);
		

[使用例]

  1. set_difference, set_symmetric_difference, set_intersection,及び,set_union の使用方法です.
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    #include <functional>
    using namespace std;
    
    bool less_a(int a, int b)
    {
    	return (bool)((a < b) ? 1 : 0);
    };
    
    class less_b : public binary_function<int, int, bool>
    {
    	public:
    		result_type operator() (first_argument_type a, second_argument_type b)
    		{
    			return (result_type)((a < b) ? 1 : 0);
    		}
    };
    
    int main()
    {
    	vector<char> v1, v2, v3, v4, v5, v6;
    	vector<char>::iterator it;
    					// 初期設定
    	printf("**初期状態 v1 ( ソートしておく必要あり )**\n");
    	for (int i1 = 0; i1 < 5; i1++)
    		v1.push_back(i1);
    	for (it = v1.begin(); it != v1.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	printf("**初期状態 v2 ( ソートしておく必要あり )**\n");
    	for (int i1 = 0; i1 < 5; i1++)
    		v2.push_back(i1+2);
    	for (it = v2.begin(); it != v2.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 に含まれ,v2 に含まれない要素
    	printf("v1 に含まれ,v2 に含まれない要素\n");
    	set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));
    							// 以下の方法でも可能
    //	set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()), less_a);
    //	set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()), less_b());
    	for (it = v3.begin(); it != v3.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 及び v2 の片方だけに含まれる要素
    	printf("v1 及び v2 の片方だけに含まれる要素\n");
    	set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v4, v4.begin()));
    	for (it = v4.begin(); it != v4.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 及び v2 の両方に含まれる要素
    	printf("v1 及び v2 の両方に含まれる要素\n");
    	set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v5, v5.begin()));
    	for (it = v5.begin(); it != v5.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    					// v1 または v2 に含まれる要素
    	printf("v1 または v2 に含まれる要素\n");
    	set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v6, v6.begin()));
    	for (it = v6.begin(); it != v6.end(); it++)
    		printf("  %d", *it);
    	printf("\n");
    
    	return 0;
    }
    			
    (出力)
    **初期状態 v1 ( ソートしておく必要あり )**
      0  1  2  3  4
    **初期状態 v2 ( ソートしておく必要あり )**
      2  3  4  5  6
    v1 に含まれ,v2 に含まれない要素
      0  1
    v1 及び v2 の片方だけに含まれる要素
      0  1  5  6
    v1 及び v2 の両方に含まれる要素
      2  3  4
    v1 または v2 に含まれる要素
      0  1  2  3  4  5  6
    			
[参照]

set_differenceset_symmetric_differenceset_intersection

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引