std::list::merge
void merge( list& other ); |
(1) | |
void merge( list&& other ); |
(1) | (since C++11) |
template <class Compare> void merge( list& other, Compare comp ); |
(2) | |
template <class Compare> void merge( list&& other, Compare comp ); |
(2) | (since C++11) |
Merges two sorted lists into one. The lists should be sorted into ascending order.
No elements are copied. The container other becomes empty after the operation. The function does nothing if this == &other. If get_allocator() != other.get_allocator(), the behavior is undefined. No iterators or references become invalidated, except that the iterators of moved elements now refer into *this, not into other. The first version uses operator< to compare the elements, the second version uses the given comparison function comp.
Contents |
[edit] Parameters
other | - | another container to merge | |||||||||
comp | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following:
The signature does not need to have const &, but the function must not modify the objects passed to it. |
[edit] Return value
(none)
[edit] Example
#include <iostream> #include <list> std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list) { for (auto &i : list) { ostr << " " << i; } return ostr; } int main() { std::list<int> list1 = { 5,9,0,1,3 }; std::list<int> list2 = { 8,7,2,6,4 }; list1.sort(); list2.sort(); std::cout << "list1: " << list1 << "\n"; std::cout << "list2: " << list2 << "\n"; list1.merge(list2); std::cout << "merged: " << list1 << "\n"; }
Output:
list1: 0 1 3 5 9 list2: 2 4 6 7 8 merged: 0 1 2 3 4 5 6 7 8 9
[edit] Complexity
at most size() + other.size() - 1 comparisons.
[edit] See also
moves elements from another list (public member function) |