Skip to content
Related Articles

Related Articles

Improve Article

merge() in C++ STL

  • Difficulty Level : Easy
  • Last Updated : 19 Sep, 2018

C++ offers in its STL library a merge() which is quite useful to merge sort two containers into a single container.
It is defined in header “algorithm“. It is implemented in two ways.

Syntax 1 : Using operator “<"

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;
}

Output:

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

Syntax 2 : Using comparator function

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;
}

Output :



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

Possible application : The merge function can be used to make a single stack of two stacks available in sorted order. These can be stack of books or notes. Let us discuss a simple example that merge orders two stack of notes in ascending order into one on basis of its value.




// 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;
}

Output :

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 

This article is contributed by Manjeet Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.



My Personal Notes arrow_drop_up
Recommended Articles
Page :