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