Algunas de las clases de operaciones de combinación se proporcionan en C++ STL bajo el archivo de encabezado «algoritmo», lo que facilita varias operaciones de combinación de manera sencilla.
Algunos de ellos se mencionan a continuación.
- fusionar (beg1, end1, beg2, end2, beg3) : – Esta función fusiona dos contenedores ordenados y los almacena en un nuevo contenedor en orden ordenado (clasificación por fusión). Toma 5 argumentos, primer y último iterador del primer contenedor, primer y último iterador del segundo contenedor y primer iterador del contenedor resultante.
- incluye (beg1, end1, beg2, end2) : – Esta función se usa para verificar si los elementos de un contenedor ordenado incluyen otros elementos de contenedor ordenados o no. Devuelve verdadero si el primer contenedor incluye el segundo contenedor; de lo contrario, devuelve falso.
CPP
// 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; }
- Producción
The new container after merging is : 1 1 3 4 5 5 6 7 20 25 30 30 v4 includes v1
- inplace_merge (beg1, beg2, end): – Esta función se usa para ordenar dos rangos ordenados colocados consecutivamente en un solo contenedor. Toma 3 argumentos, iterador al comienzo del primer rango ordenado, iterador al comienzo del segundo rango ordenado e iterador a la última posición.
CPP
// 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; }
- Producción:
The new container after inplace_merging is : 1 1 3 4 5 5 6 7 20 25 30 30
- set_union(beg1, end1, beg2, end2, beg3) :- Esta función calcula la unión establecida de dos contenedores y las almacena en un nuevo contenedor. Devuelve el iterador al último elemento del contenedor resultante. Toma 5 argumentos, primer y último iterador del primer contenedor, primer y último iterador del segundo contenedor y primer iterador del contenedor resultante. Los contenedores deben clasificarse y es necesario que el nuevo contenedor se redimensione al tamaño adecuado.
- set_intersection(beg1, end1, beg2, end2, beg3) :- Esta función calcula la intersección establecida de dos contenedores y las almacena en un nuevo contenedor. Devuelve el iterador al último elemento del contenedor resultante. Toma 5 argumentos, primer y último iterador del primer contenedor, primer y último iterador del segundo contenedor y primer iterador del contenedor resultante. Los contenedores deben clasificarse y es necesario que el nuevo contenedor se redimensione al tamaño adecuado.
Una forma de implementar la unión de conjuntos y la intersección de conjuntos en rangos ordenados se puede encontrar aquí
CPP
// 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; }
- Producción:
Union of two containers is : 1 3 4 5 6 7 20 25 30 Intersection of two containers is : 1 5 30
- set_difference (beg1, end1, beg2, end2, beg3) : – Esta función calcula la diferencia establecida de dos contenedores y las almacena en un nuevo contenedor. Devuelve el iterador al último elemento del contenedor resultante. Toma 5 argumentos, primer y último iterador del primer contenedor, primer y último iterador del segundo contenedor y primer iterador del contenedor resultante. Los contenedores deben clasificarse y es necesario que el nuevo contenedor se redimensione al tamaño adecuado.
- s et_symmetric_difference(beg1, end1, beg2, end2, beg3) : – Esta función calcula la diferencia simétrica establecida de dos contenedores y las almacena en un nuevo contenedor. Devuelve el iterador al último elemento del contenedor resultante. Toma 5 argumentos, primer y último iterador del primer contenedor, primer y último iterador del segundo contenedor y primer iterador del contenedor resultante. Los contenedores deben clasificarse y es necesario que el nuevo contenedor se redimensione al tamaño adecuado.
CPP
// 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; }
- Producción:
Difference of two containers is : 3 4 20 Symmetric difference of two containers is : 3 4 6 7 20 25
Este artículo es una contribución de Manjeet Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA