C++ <forward_list> - merge() Function
The C++ forward_list::merge function is used to merge two sorted forward_lists into one. The forward_lists should be sorted into ascending order before calling this function.
The function merges the forward_list other into the given forward_list by transferring all of its elements at their respective ordered positions into the forward_list. The container other becomes empty after the operation, and the whole operation is performed without constructing or destroying any element.
The elements of two forward_lists are compared using operator< (in first version) or comp (in second version).
Syntax
//version 1 void merge (forward_list& other); void merge (forward_list&& other); //version 2 template <class Compare> void merge (forward_list& other, Compare comp); template <class Compare> void merge (forward_list&& other, Compare comp);
Parameters
other |
Specify another forward_list object of same type to merge. |
comp |
Specify a binary function that accepts two element as arguments, and returns a value convertible to bool. The returned value indicates whether the first argument is considered to go before the second using the strict weak ordering it defines. |
Return Value
None.
Time Complexity
Linear i.e, Θ(n).
Example:
In the example below, the forward_list::merge function is used to merge two sorted forward_lists.
#include <iostream> #include <forward_list> using namespace std; int main (){ forward_list<int> flist1{10, 20, 50, 60}; forward_list<int> flist2{10, 30, 45, 75}; forward_list<int>::iterator it; cout<<"flist1 contains: "; for(it = flist1.begin(); it != flist1.end(); it++) cout<<*it<<" "; cout<<"\nflist2 contains: "; for(it = flist2.begin(); it != flist2.end(); it++) cout<<*it<<" "; //merging flist2 into flist1 flist1.merge(flist2); //displaying the result cout<<"\n\nAfter merging, flist1 contains: \n"; for(it = flist1.begin(); it != flist1.end(); it++) cout<<*it<<" "; return 0; }
The output of the above code will be:
flist1 contains: 10 20 50 60 flist2 contains: 10 30 45 75 After merging, flist1 contains: 10 10 20 30 45 50 60 75
Example:
The example below describes the usage of second version of forward_list::merge function, where int value of elements are used for sorting the elements.
#include <iostream> #include <forward_list> using namespace std; //a binary predicate to compare int value of elements bool int_comp (double x, double y) { return ( int(x) < int(y) ); } int main (){ forward_list<double> flist1{3.5, 3.2, 5.5}; forward_list<double> flist2{3.3, 5.9, 5.4}; forward_list<double>::iterator it; cout<<"flist1 contains: "; for(it = flist1.begin(); it != flist1.end(); it++) cout<<*it<<" "; cout<<"\nflist2 contains: "; for(it = flist2.begin(); it != flist2.end(); it++) cout<<*it<<" "; //merging flist2 into flist1 flist1.merge(flist2, int_comp); //displaying the result cout<<"\n\nAfter merging, flist1 contains: \n"; for(it = flist1.begin(); it != flist1.end(); it++) cout<<*it<<" "; return 0; }
The output of the above code will be:
flist1 contains: 3.5 3.2 5.5 flist2 contains: 3.3 5.9 5.4 After merging, flist1 contains: 3.5 3.2 3.3 5.5 5.9 5.4
❮ C++ <forward_list> Library