برخی از کلاسهای عملیات ادغام در STL در ++C تحت هِدرفایل algorithm فراهم شدهاند، که عملیاتهای ادغام مختلف را در روشی ساده، آسان کرده است. در زیر به برخی از آنها اشارهشده است.
قطعهکُد زیر کارکرد دو تابع بالا را نشان میدهد:
// C++ code to demonstrate the working of // merge() and include() #include<iostream> #include<algorithm> // merge operations #include<vector> // for vector using namespace std; int main() { // Initializing 1st vector vector<int> v1 = {1, 3, 4, 5, 20, 30}; // Initializing 2nd vector vector<int> v2 = {1, 5, 6, 7, 25, 30}; // Declaring resultant vector // for merging vector<int> v3(12); // Using merge() to merge vectors v1 and v2 // and storing result in v3 merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); // Displaying resultant container cout << "The new container after merging is :\n"; for (int &x : v3) cout << x << " "; cout << endl; // Initializing new vector vector<int> v4 = {1, 3, 4, 5, 6, 20, 25, 30}; // Using include() to check if v4 contains v1 includes(v4.begin(), v4.end(), v1.begin(), v1.end())? cout << "v4 includes v1": cout << "v4 does'nt include v1"; return 0; }
خروجی قطعهکُد بالا به این صورت است:
The new container after merging is : 1 1 3 4 5 5 6 7 20 25 30 30 v4 includes v1
3. inplace_merge(beg1, beg2, end): این تابع برای مرتبکردن 2 طیف مرتبشده قرارگرفته به طورمتوالی در تنها یک نگهدارنده استفاده میشود که 3 آرگومانت دریافت میکند: پیمایشگر به ابتدای اولین طیف مرتبشده، پیمایشگر به ابتدای دومین طیف مرتبشده و پیمایشگر به موقعیت آخر.
// C++ code to demonstrate the working of // inplace_merge() #include<iostream> #include<algorithm> // merge operations #include<vector> // for vector using namespace std; int main() { // Initializing 1st vector vector<int> v1 = {1, 3, 4, 5, 20, 30}; // Initializing 2nd vector vector<int> v2 = {1, 5, 6, 7, 25, 30}; // Declaring resultant vector // for inplace_merge() vector<int> v3(12); // using copy to copy both vectors into // one container auto it = copy(v1.begin(), v1.end(), v3.begin()); copy(v2.begin(), v2.end(), it); // Using inplace_merge() to sort the container inplace_merge(v3.begin(),it,v3.end()); // Displaying resultant container cout << "The new container after inplace_merging is :\n"; for (int &x : v3) cout << x << " "; cout << endl; return 0; }
خروجی قطعهکُد بالا به این صورت است:
The new container after inplace_merging is : 1 1 3 4 5 5 6 7 20 25 30 30
4. set_union(beg1, end1, beg2, end2, beg3): این تابع مجموع اجتماع 2 نگهدارنده را محاسبه و در نگهدارندهی جدید ذخیره میکند که پیمایشگری به آخرین عنصر از نگهدارندهی بدستآمده را برمیگرداند و 5 آرگومانت دریافت میکند: آولین و آخرین پیمایشگر اولین نگهدارنده، اولین و آخرین نگهدارندهی پیمایشگر دومین نگهدارنده و اولین پیمایشگر نگهدارندهی بدستآمده. نگهدارندهها باید مرتبشده باشند و لازم است که نگهدارندهی جدید به اندازهی مناسب، تغییراندازه دهد.
5. set_intersection(beg1, end1, beg2, end2, beg3): این تابع مجموع اشتراک 2 نگهدارنده را محاسبه و در یک نگهدارندهی جدید ذخیره میکند. این تابع پیمایشگری به آخرین عنصر نگهدارنده بدستآمده را برمیگرداند که 5 آرگومانت دریافت میکند: اولین و آخرین پیمایشگر اولین نگهدارنده، اولین و آخرین پیمایشگر دومین نگهدارنده و اولین پیمایشگر نگهدارندهی بدستآمده. نگهدارندهها باید مرتبشده باشند و لازم است که نگهدارندهی جدید به اندازهی مناسب، تغییراندازه دهد. یک روش برای پیادهسازی set-union و set-intersection در طیفهای مرتبشده در اینجا میتواند یافت شود.
// C++ code to demonstrate the working of // set_union() and set_intersection() #include<iostream> #include<algorithm> // for merge operations #include<vector> // for vector using namespace std; int main() { // Initializing 1st vector vector<int> v1 = {1, 3, 4, 5, 20, 30}; // Initializing 2nd vector vector<int> v2 = {1, 5, 6, 7, 25, 30}; // Declaring resultant vector // for union vector<int> v3(10); // Declaring resultant vector // for intersection vector<int> v4(10); // using set_union() to compute union of 2 // containers v1 and v2 and store result in v3 auto it = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); // using set_intersection() to compute intersection // of 2 containers v1 and v2 and store result in v4 auto it1 = set_intersection(v1.begin(),v1.end(), v2.begin(), v2.end(), v4.begin()); // resizing new container v3.resize(it - v3.begin()); // resizing new container v4.resize(it1 - v4.begin()); // Displaying set union cout << "Union of two containers is : "; for (int &x : v3) cout << x << " "; cout << endl; // Displaying set intersection cout << "Intersection of two containers is : "; for (int &x : v4) cout << x << " "; cout << endl; return 0; }
خروجی قطعهکُد بالا به این صورت است:
Union of two containers is : 1 3 4 5 6 7 20 25 30 Intersection of two containers is : 1 5 30
6. set_difference(beg1, end1, beg2, end2, beg3): این تابع مجموعهی متفاوت 2 نگهدارنده را محاسبه و در نگهدارندهی جدید ذخیره میکند. این تابع پیمایشگر به آخرین عنصر از نگهدارندهی بدستآمده را برمیگرداند که 5 آرگومانت دریافت میکند: اولین و آخرین پیمایشگر از اولیننگهدارنده، اولین و آخرین پیمایشگر از دومین نگهدارنده و اولین پیمایشگر از نگهدارندهی بدستآمده. نگهدارندهها باید مرتبشده باشند و لازم است که نگهدارندهی جدید به اندازهی مناسب، تغییراندازه دهد.
7. set_symmetric_difference(beg1, end1, beg2, end2, beg3): این تابع مجموع متقارن 2 نگهدارندهی متفاوت را محاسبه و در یک نگهدارندهی جدید ذخیره میکند. این تابع پیمایشگر به آخرین عنصر از نگهدارندهی بدستآمده را برمیگرداند که 5 آرگومانت دریافت میکند: اولین و آخرین پیمایشگر از اولین نگهدارنده، اولین و آخرین پیمایشگر از دومین نگهدارنده و اولین پیمایشگر از نگهدارندهی بدستآمده. نگهدارندهها باید مرتبشده باشند و لازم است که نگهدارندهی جدید به اندازهی مناسب، تغییراندازه دهد.
// C++ code to demonstrate the working of // set_difference() and set_symmetric_difference() #include<iostream> #include<algorithm> // for merge operations #include<vector> // for vector using namespace std; int main() { // Initializing 1st vector vector<int> v1 = {1, 3, 4, 5, 20, 30}; // Initializing 2nd vector vector<int> v2 = {1, 5, 6, 7, 25, 30}; // Declaring resultant vector // for difference vector<int> v3(10); // Declaring resultant vector // for symmetric_difference vector<int> v4(10); // using set_difference() to compute difference // of 2 containers v1 and v2. auto it = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); // using set_symmetric_difference() to compute // symmetric_difference/ of 2 containers auto it1 = set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), v4.begin()); // resizing new container v3.resize(it - v3.begin()); // resizing new container v4.resize(it1 - v4.begin()); // Displaying set difference cout << "Difference of two containers is : "; for (int &x : v3) cout << x << " "; cout << endl; // Displaying set symmetric_difference cout << "symmetric_difference of two containers is : "; for (int &x : v4) cout << x << " "; cout << endl; return 0; }
خروجی قطعهکُد بالا به این صورت است:
Difference of two containers is : 3 4 20 Symmetric difference of two containers is : 3 4 6 7 20 25
منبع: وب سایت geeksforgeeks
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.