Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

std::includes работает неправильно

#cpp #алгоритм


Почему программа выводит 0? В описании функции сказано Returns true if the sorted
range [first1,last1) contains all the elements in the sorted range [first2,last2).http://www.cplusplus.com/reference/algorithm/includes/.
Но a содержит все элементы из b (1 и 2)

std::vector a{1, 2};
std::vector b{1, 2, 1, 2};

std::cout << std::includes(a.begin(), a.end(), b.begin(), b.end());

    


Ответы

Ответ 1



std::vector a{1, 2}; // тут вы забыли аргумент шаблона std::vector b{1, 2, 1, 2}; Поменяйте местами обьекты, и все заработает std::swap(a, b); std::cout << std::includes(a.begin(), a.end(), b.begin(), b.end()); если b является подмножеством a, то получите положительный результат

Ответ 2



Здесь по сути проверяется, входит ли диапазон полностью в другой диапазон, а не вычисляется разность множеств. Поэтому одинаковые элементы вполне допустимы (как в мультимножестве), и диапазона a явно не хватает для включения диапазона b. А вот наоборот - вполне: проверьте сами std::cout << std::includes(b.begin(), b.end(), a.begin(), a.end()); но не забудьте отсортировать :) Другими словами, a является подмножеством b, но b не является подмножеством a - хотя бы потому, что в нем больше элементов :)

Комментариев нет:

Отправить комментарий