Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Класс list: объединение упорядоченных списков
Метод merge()
предназначен для объединения упорядоченных списков. Результатом выполнения метода является упорядоченный текущий список. Для объединения не отсортированных списков можно использовать метод splice()
(см. разд. 17.1.9). Прототипы метода merge()
:
void merge(list &x);
void merge(list &&x);
template<typename Compare> void merge(list &x, Compare comp);
template<typename Compare> void merge(list &&x, Compare comp);
Первые два прототипа переносят все элементы списка x
в текущий список (в пользовательских классах должен быть перегружен оператор <
, иначе получите ошибку при компиляции):
std::list<int> arr1 = {3, 5, 1}, arr2 = {4, 2};
arr1.sort(); // 1 3 5
arr2.sort(); // 2 4
arr1.merge(arr2);
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4 5
std::cout << arr2.size() << std::endl; // 0
Третий и четвертый прототипы позволяют дополнительно указать пользовательский способ сравнения элементов. Функтор comp
принимает два параметра и должен возвращать значение true
, если первое значение меньше второго, и false
— в противном случае. Произведем объединение списков, отсортированных в обратном порядке:
std::list<int> arr1 = {3, 5, 1}, arr2 = {4, 2};
arr1.sort( [](int &a, int &b) {return a > b;} ); // 5 3 1
arr2.sort( [](int &a, int &b) {return a > b;} ); // 4 2
arr1.merge(arr2, [](int &a, int &b) {return a > b;});
for (int &el : arr1) std::cout << el << ' ';
std::cout << std::endl; // 5 4 3 2 1
std::cout << arr2.size() << std::endl; // 0
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов