set_union

[機能]

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

[形式]
#include <algorithm>

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,includes の使用方法です.
    #include <stdio.h>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
    					// 初期設定
    	vector<int> v1	{1, 3, 10, 2, 10, 3, 20};
    	printf("v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    
    	vector<int> v2	{5, 3, 2, 3, 4, 3, 30};
    	printf("v2 :");
    	for (auto x : v2)
    		printf("  %d", x);
    	printf("\n");
    					// sort
    	sort(v1.begin(), v1.end());
    	printf("  sort v1 :");
    	for (auto x : v1)
    		printf("  %d", x);
    	printf("\n");
    
    	sort(v2.begin(), v2.end());
    	printf("  sort v2 :");
    	for (auto x : v2)
    		printf("  %d", x);
    	printf("\n");
    					// v1 に含まれ,v2 に含まれない要素
    	printf("v1 に含まれ,v2 に含まれない要素\n");
    	vector<int> v3;
    	set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin()));   // inserter 参照
    	printf("  set_difference v3 :");
    	for (auto x : v3)
    		printf("  %d", x);
    	printf("\n");
    					// v1 及び v2 の片方だけに含まれる要素
    	printf("v1 及び v2 の片方だけに含まれる要素\n");
    	vector<int> v4;
    	set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v4, v4.begin()));
    	printf("  set_symmetric_difference v4 :");
    	for (auto x : v4)
    		printf("  %d", x);
    	printf("\n");
    					// v1 及び v2 の両方に含まれる要素
    	printf("v1 及び v2 の両方に含まれる要素\n");
    	vector<int> v5;
    	set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v5, v5.begin()));
    	printf("  set_intersection v5 :");
    	for (auto x : v5)
    		printf("  %d", x);
    	printf("\n");
    					// v1 または v2 に含まれる要素
    	printf("v1 または v2 に含まれる要素\n");
    	vector<int> v6;
    	set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v6, v6.begin()));
    	printf("  set_union v6 :");
    	for (auto x : v6)
    		printf("  %d", x);
    	printf("\n");
    					// v7 または v8 に v5 が含まれるか?
    	printf("v7 に v5 が含まれるか?\n");
    	vector<int> v7	{2, 3, 5, 10};
    	vector<int> v8	{2, 3, 3, 5, 10};
    	printf("  v7 :");
    	for (auto x : v7)
    		printf("  %d", x);
    	printf("\n");
    	printf("  v8 :");
    	for (auto x : v8)
    		printf("  %d", x);
    	printf("\n");
    	printf("  v5 :");
    	for (auto x : v5)
    		printf("  %d", x);
    	printf("\n");
    	bool b1 = includes(v7.begin(), v7.end(), v5.begin(), v5.end());
    	bool b2 = includes(v8.begin(), v8.end(), v5.begin(), v5.end());
    	cout << boolalpha << "  v7 に v5 が含まれるか? " << b1 << endl;
    	cout << "  v8 に v5 が含まれるか? " << b2 << endl;
    
    	return 0;
    }
    			
    (出力)
    v1 :  1  3  10  2  10  3  20
    v2 :  5  3  2  3  4  3  30
      sort v1 :  1  2  3  3  10  10  20
      sort v2 :  2  3  3  3  4  5  30
    v1 に含まれ,v2 に含まれない要素
      set_difference v3 :  1  10  10  20
    v1 及び v2 の片方だけに含まれる要素
      set_symmetric_difference v4 :  1  3  4  5  10  10  20  30
    v1 及び v2 の両方に含まれる要素
      set_intersection v5 :  2  3  3
    v1 または v2 に含まれる要素
      set_union v6 :  1  2  3  3  3  4  5  10  10  20  30
    v7 に v5 が含まれるか?
      v7 :  2  3  5  10
      v8 :  2  3  3  5  10
      v5 :  2  3  3
      v7 に v5 が含まれるか? false
      v8 に v5 が含まれるか? true
    			
[参照]

set_differenceset_symmetric_differenceset_intersectionincludessort

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