Метод merge
Метод merge класса list сливает два отсортированных списка в один. По умолчанию список-аргумент присоединяется к текущему списку с сохранением возрастающего порядка сортировки. В первый параметр можно передать функцию-компаратор, которая задаёт собственный критерий сравнения элементов, а во второй - объект-аллокатор. После выполнения метода список-аргумент становится пустым, а все его элементы переходят в текущий список.
Синтаксис
list.merge(other_list)
list.merge(other_list, comp)
Пример
Давайте сольём два отсортированных по возрастанию списка в один:
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> first = {1, 3, 5};
list<int> second = {2, 4, 6};
first.merge(second);
for (int elem : first) {
cout << elem << " ";
}
cout << endl;
cout << second.size() << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5 6
0
Пример
Давайте сольём два списка, отсортированных по убыванию, передав компаратор greater:
#include <iostream>
#include <list>
#include <functional>
using namespace std;
int main()
{
list<int> first = {5, 3, 1};
list<int> second = {6, 4, 2};
first.merge(second, greater<int>());
for (int elem : first) {
cout << elem << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
6 5 4 3 2 1
Пример
Давайте сольём два списка строк, отсортированных по возрастанию:
#include <iostream>
#include <list>
#include <string>
using namespace std;
int main()
{
list<string> first = {"a", "c", "e"};
list<string> second = {"b", "d"};
first.merge(second);
for (string elem : first) {
cout << elem << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
"a b c d e"