Hiệu đối xứng (Symmetric Difference) của hai tập hợp là tập các phần tử chỉ xuất hiện trong một trong hai tập, không xuất hiện trong cả hai. STL cung cấp std::set_symmetric_difference.
Thuật toán
- Đảm bảo hai dãy đầu vào đã sắp xếp.
- Cấp phát vector kết quả.
- Gọi
set_symmetric_differencevới 5 tham số: first1, last1, first2, last2, result.begin(). - Resize vector theo iterator kết quả.
Ví dụ mã
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int set1[] = {5, 6, 7, 8, 9, 10};
int set2[] = {1, 2, 3, 4, 6, 7};
vector<int> v(12);
vector<int>::iterator st;
sort(set1, set1 + 6);
sort(set2, set2 + 6);
st = set_symmetric_difference(set1, set1 + 6, set2, set2 + 6, v.begin());
v.resize(st - v.begin());
cout << "Hiệu đối xứng có " << v.size() << " phần tử: ";
for (st = v.begin(); st != v.end(); ++st)
cout << *st << " ";
cout << endl;
return 0;
}
Kết quả
Hiệu đối xứng có 8 phần tử: 1 2 3 4 5 8 9 10