fusionar() en C++ STL – Part 1

C++ ofrece en su biblioteca STL una combinación() que es bastante útil para combinar dos contenedores en un solo contenedor.
Se define en el encabezado “ algoritmo ”. Se implementa de dos maneras.

Sintaxis 1: Uso del operador «<«

Template :
template 
  outiter merge (initer1 beg1, initer1 end1,
                        initer2 beg2, initer2 end2,
                        outiter res)

Parameters :
beg1 :  Input iterator to initial position of first sequence.
end1 :  Input iterator to final position of first sequence.

beg2 :  Input iterator to initial position of second sequence.
end2 :  Input iterator to final position of second sequence.

res : Output Iterator to initial position of resultant container.
Return value : 
Iterator to last element of the resulting container.
// C++ code to demonstrate the working of
// merge() implementation 1
  
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    // initializing 1st container
    vector<int> arr1 = { 1, 4, 6, 3, 2 };
  
    // initializing 2nd container
    vector<int> arr2 = { 6, 2, 5, 7, 1 };
  
    // declaring resultant container
    vector<int> arr3(10);
  
    // sorting initial containers
    sort(arr1.begin(), arr1.end());
    sort(arr2.begin(), arr2.end());
  
    // using merge() to merge the initial containers
    merge(arr1.begin(), arr1.end(), arr2.begin(), arr2.end(), arr3.begin());
  
    // printing the resultant merged container
    cout << "The container after merging initial containers is : ";
  
    for (int i = 0; i < arr3.size(); i++)
        cout << arr3[i] << " ";
    return 0;
}

Producción:

The container after merging initial containers is : 1 1 2 2 3 4 5 6 6 7 

Sintaxis 2: Uso de la función de comparación

Template :
template 
  outiter merge (initer1 beg1, initer1 end1,
                        initer2 beg2, initer2 end2,
                        outiter res, Compare comp)

Parameters :
beg1 :  Input iterator to initial position of first sequence.
end1 :  Input iterator to final position of first sequence.

beg2 :  Input iterator to initial position of second sequence.
end2 :  Input iterator to final position of second sequence.

res : Output Iterator to initial position of resultant container.
comp : The comparator function that returns a boolean
true/false of the each elements compared. This function 
accepts two arguments. This can be function pointer or 
function object and cannot change values.
Return value : 
Iterator to last element of the resulting container.
// C++ code to demonstrate the working of
// merge() implementation 2
  
#include <bits/stdc++.h>
using namespace std;
  
// comparator function to reverse merge sort
struct greaters {
    bool operator()(const long& a, const long& b) const
    {
        return a > b;
    }
};
  
int main()
{
    // initializing 1st container
    vector<int> arr1 = { 1, 4, 6, 3, 2 };
  
    // initializing 2nd container
    vector<int> arr2 = { 6, 2, 5, 7, 1 };
  
    // declaring resultant container
    vector<int> arr3(10);
  
    // sorting initial containers
    // in descending order
    sort(arr1.rbegin(), arr1.rend());
    sort(arr2.rbegin(), arr2.rend());
  
    // using merge() to merge the initial containers
    // returns descended merged container
    merge(arr1.begin(), arr1.end(), arr2.begin(), arr2.end(), arr3.begin(), greaters());
  
    // printing the resultant merged container
    cout << "The container after reverse merging initial containers is : ";
  
    for (int i = 0; i < arr3.size(); i++)
        cout << arr3[i] << " ";
    return 0;
}

Producción :

The container after reverse merging initial containers is : 7 6 6 5 4 3 2 2 1 1 

Posible aplicación: la función de combinación se puede utilizar para hacer que una sola pila de dos pilas esté disponible en orden ordenado . Estos pueden ser una pila de libros o notas. Analicemos un ejemplo simple que fusiona órdenes de dos pilas de billetes en orden ascendente en uno en función de su valor.

// C++ code to demonstrate the application of
// merge() stacking notes
  
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    // initializing 1st container
    // containing denominations
    vector<int> stack1 = { 50, 20, 10, 100, 2000 };
  
    // initializing 2nd container
    // containing demonitions
    vector<int> stack2 = { 500, 2000, 10, 100, 50 };
  
    // declaring resultant stack
    vector<int> stack3(10);
  
    cout << "The original 1st stack : ";
    for (int i = 0; i < 5; i++)
        cout << stack1[i] << " ";
  
    cout << endl;
  
    cout << "The original 2nd stack : ";
    for (int i = 0; i < 5; i++)
        cout << stack2[i] << " ";
  
    cout << endl;
  
    // sorting initial stacks of notes
    // in descending order
    sort(stack1.begin(), stack1.end());
    sort(stack2.begin(), stack2.end());
  
    // using merge() to merge the initial stacks
    // of notes
    merge(stack1.begin(), stack1.end(), stack2.begin(), stack2.end(), stack3.begin());
  
    // printing the resultant stack
    cout << "The resultant stack of notes is : ";
  
    for (int i = 0; i < stack3.size(); i++)
        cout << stack3[i] << " ";
    return 0;
}

Producción :

The original 1st stack : 50 20 10 100 2000 
The original 2nd stack : 500 2000 10 100 50 
The resultant stack of notes is : 10 10 20 50 50 100 100 500 2000 2000 

Este artículo es una contribución de Manjeet Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *