#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::vectora{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 - хотя бы потому, что в нем больше элементов :)
Комментариев нет:
Отправить комментарий