Giả sử chúng ta có hai mảng đã sắp xếp là arr1 và arr2, có kích thước lần lượt là m và n. Chúng ta phải tìm phần bù tương đối của hai mảng. Có nghĩa là chúng ta cần tìm tất cả các phần tử có trong arr1, nhưng không có trong arr2. Vì vậy, nếu các mảng như A =[3, 6, 10, 12, 15] và B =[1, 3, 5, 10, 16], thì kết quả sẽ là [6, 12, 15]
Để giải quyết vấn đề này, chúng ta có thể sử dụng hàm set_difference. Vì vấn đề về cơ bản là thiết lập hoạt động khác biệt.
Ví dụ
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int first[] = {3, 6, 10, 12, 15}; int second[] = {1, 3, 5, 10, 16}; int n = sizeof(first) / sizeof(first[0]); vector<int> temp(5); vector<int>::iterator it, ls; sort(first, first + 5); sort(second, second + 5); cout << "First array :"; for (int i = 0; i < n; i++) cout << " " << first[i]; cout << endl; cout << "Second array :"; for (int i = 0; i < n; i++) cout << " " << second[i]; cout << endl; ls = set_difference(first, first + 5, second, second + 5, temp.begin()); cout << "The result of relative complement "; for (it = temp.begin(); it < ls; ++it) cout << " " << *it; cout << endl; }
Đầu ra
First array : 3 6 10 12 15 Second array : 1 3 5 10 16 The result of relative complement 6 12 15