Недавно вопрос прозвучал про этот алгоритм. По стандарту он принимает отсортированные последовательности, но у меня всегда выдавал правильный результат и для неотсортированных множеств. Вот, например:
std::vector<int> a{1, 2, 5, 3, 11, 23, 12, 6};
std::vector<int> b{5, 3, 11};
if (std::includes(a.begin(), a.end(), b.begin(), b.end()))
cout << b.back(); // вывод 11
И, на всякий случай, ссылка на стандарт: https://ru.cppreference.com/w/cpp/algorithm/includes Думаю, просто алгоритм быстрее работает для сортированных множеств, а не сортирует неотсортированные (или просто не требуется сортировка?). Пока не разобрался, хотелось бы получить от вас помощь(каков ваш ответ?...) Просто, чисто логично, сортировка тут не нужна вовсе...
У вас слишком хорошая последовательность выбрана... Попробуйте на
std::vector<int> a{1, 2, 5, 3, 23, 11, 12, 6};
Взгляните на примерную реализацию алгоритма по указанной вами ссылке, и все должно стать понятно, почему это так.
По законам логики из ложных посылок может вытекать как ложь, так и истина, так что верный результат еще не говорит о том, что он будет всегда :( А вот хоть один ложный показывает, что исходные посылки - ложны.
но у меня всегда выдавал правильный результат и для неотсортированных множеств
Вы что-то выдумываете. Поведение алгоритма std::includes
на неупорядоченных последовательностях не определено, т.е. он вообще не работает на неупорядоченных последовательностях. Ваше "у меня всегда выдавал правильный результат" - это просто случайность (в которую, к тому же, трудно поверить).
Просто, чисто логично, сортировка тут не нужна вовсе
Отнюдь. Стандартная функция std::includes
и остальные функции этой группы (std::set_difference
, std::set_union
и т.д.) для того и заведены, чтобы реализовать теоретико-множественные операции через хрестоматийный алгоритм синхронного прохода по двум отсортированным последовательностям. Без упорядоченности последовательностей эти алгоритмы не имеют смысла.
У меня есть обычная консольная форма регистрации:
Что это такое? Может ли кто-нибудь привести пример? Решение через указатель не подходит