برخی از کلاسهای عملیات ادغام در 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
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.