บทนำ
มีอาร์เรย์ 2 อาร์เรย์ ต้องการเปรียบเทียบหาตัวเลขที่อยู่ในอาร์เรย์แรกแต่ไม่อยู่ในอาร์เรย์ที่สอง โดยใช้ STL ใน C++
ตัวอย่าง
Input: array1[] = {1,2,3,4,5,7} array2[] = {2,3,4,5,6,8}
Output: 1, 7
Input: array1[] = {1,20,33,45,67} array2[] = {1,12,13,114,15,13}
Output: 20,33,45,67
แนวทางในโปรแกรม -
- สร้างฟังก์ชัน find() เพื่อหาอิลิเมนต์ที่อยู่ในอาร์เรย์ 1 แต่ไม่อยู่ในอาร์เรย์ 2
- ประกาศ Vector (ไดนามิกอาร์เรย์ที่ปรับขนาดอัตโนมัติ) เก็บผลลัพธ์ และ Iterator สำหรับวนลูป
- เรียงอาร์เรย์ทั้งสอง แล้วใช้ set_difference() หาความต่าง และ resize vector ตามผลลัพธ์
ใน STL ใช้ set_difference() หา "array1 - array2" ความต่างของเซต 2 ตัว คืออิลิเมนต์ที่อยู่ในเซตแรกแต่ไม่อยู่ในเซตที่สอง อิลิเมนต์ที่คัดลอกมาจะมาจากช่วงแรกเสมอ และทั้งสองช่วงต้องเรียงลำดับไว้ก่อน
Syntax
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
อัลกอริทึม
Start
Step 1 → Create function find(array1, array2, x, y)
Declare vector v(x + y)
Declare vector<int>::iterator it
Sort array1, array2
diff = set_difference(array1, array1+x, array2, array2+y, v.begin())
v.resize(diff - v.begin())
Print elements in array1 not in array2
End
Step 2 → In main()
Declare array1, array2
Calculate x, y sizes
Call find(array1, array2, x, y)
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void find(int array1[], int array2[], int x, int y) {
vector<int> v(x + y);
vector<int>::iterator it;
sort(array1, array1 + x);
sort(array2, array2 + y);
auto diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin());
v.resize(diff - v.begin());
cout << "The elements present in array1[] and not in array2[]: ";
for (auto diff = v.begin(); diff != v.end(); ++diff)
cout << *diff << " ";
cout << endl;
}
int main() {
int array1[] = { 1, 2, 3, 4, 5, 7 };
int array2[] = { 2, 3, 4, 5, 6, 8 };
int x = sizeof(array1) / sizeof(array1[0]);
int y = sizeof(array2) / sizeof(array2[0]);
find(array1, array2, x, y);
return 0;
}
ผลลัพธ์
The elements present in array1[] and not in array2[]: 1 7
หมายเหตุ
โค้ดต้นฉบับมีข้อผิดพลาด: ตัวแปร diff ไม่ได้ประกาศ type และใช้ sizeof(array2[1]) ควรเป็น sizeof(array2[0]) โค้ดข้างบนแก้ไขแล้ว