Как проверить, является ли один вектор подмножеством другого?
В настоящее время я думаю, что мой лучший вариант-использовать std::set_intersection, а затем проверить, совпадает ли размер меньшего ввода с количеством элементов, заполненных set_intersection.
есть ли лучшее решение?
1 ответов
попробуйте это:
if (std::includes(set_one.begin(), set_one.end(),
set_two.begin(), set_two.end()))
{
// ...
}
алгоритм includes() сравнивает два отсортированный последовательности и возвращает true, если каждый элемент в диапазоне [start2, finish2) содержится в диапазоне [начало1, окончание1). Она возвращает значение false иначе. includes () предполагает, что последовательности сортируются по operator
работает в
в большинстве ((окончание1 - начало1) + (отделка2 - start2)) * выполняются сравнения 2 - 1.
Plus O(nlog (n)) для сортировки векторов. Вы не получите его быстрее.