เรามีสองอาร์เรย์ งานคือการเปรียบเทียบสองอาร์เรย์และค้นหาตัวเลขที่มีอยู่ในอาร์เรย์แรก แต่ไม่ใช่ในอาร์เรย์ที่สอง โดยใช้ไลบรารีเทมเพลตมาตรฐาน (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
- ในฟังก์ชัน เราจะประกาศเวกเตอร์ (เวกเตอร์เหมือนกับอาร์เรย์ไดนามิกที่มีความสามารถในการปรับขนาดตัวเองโดยอัตโนมัติเมื่อองค์ประกอบถูกแทรกหรือลบ) เพื่อเก็บผลลัพธ์ และเราจะประกาศตัววนซ้ำเพื่อสำรวจเวกเตอร์ด้วย
- ตอนนี้ เราจะจัดเรียงอาร์เรย์และค้นหาองค์ประกอบที่ขาดหายไปโดยใช้เมธอด set_difference( ) และปรับขนาดเวกเตอร์ตามผลลัพธ์และเก็บค่า จากนั้นจึงพิมพ์โซลูชัน
ใน Standard Template Library (STL) เราสามารถใช้วิธี set_difference( ) เพื่อค้นหา “array1-array2” ความแตกต่างของสองชุดเกิดจากองค์ประกอบที่มีอยู่ในชุดแรก แต่ไม่ใช่ในชุดที่สอง องค์ประกอบที่คัดลอกโดยฟังก์ชันจะมาจากช่วงแรกเสมอในลำดับเดียวกัน องค์ประกอบในทั้งสองช่วงจะต้องได้รับการสั่งซื้อแล้ว
ไวยากรณ์
ไวยากรณ์สำหรับ set_difference() คือ −
OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);
อัลกอริทึม
Start Step 1-> Create function for finding missing elements void find(int array1[], int array2[], int x, int y) Declare a vector which stores the result as vector<int> v(x + y) Declare an iterator traverse the vector as vector<int>::iterator it Sort the arrays sort array1 and sort array2 End Find the missing elements diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin()) resize the vector to the existing count v.resize(diff - v.begin()) print the elements present in array1[] and not in array2[] for (diff = v.begin() diff != v.end() ++diff Print *diff End Step 2-> In main() Declare array as int array1and int array2 Declare variable x and y to calculate the size of array1 and array 2 as int x = size of array1 and int y = size of array2 Call the function as find(array1, array2, x, y)
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
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[1]);
find(array1, array2, x, y);
return 0;
}
// Creating function named “find” for finding missing elements
void find(int array1[], int array2[],
int x, int y) {
// Declaring a vector which stores the result
vector<int> v(x + y);
// Declaring an iterator traverse the vector
vector<int>::iterator it;
// Sorting the arrays
sort(array1, array1 + x);
sort(array2, array2 + y);
// Finding the missing elements
diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin());
//resizing the vector to the existing count
v.resize(diff - v.begin());
cout << "The elements present in array1[] and not in array2[]:”;
for (diff = v.begin(); diff != v.end(); ++diff)
cout << *diff << " ";
cout << endl;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
The elements present in array1[] and not in array2[]: 1,7