Как проверить, является ли один вектор подмножеством другого?

В настоящее время я думаю, что мой лучший вариант-использовать 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)) для сортировки векторов. Вы не получите его быстрее.