Как проверить, является ли один вектор подмножеством другого? - PullRequest
14 голосов
/ 01 ноября 2010

В настоящее время я думаю, что лучше всего использовать std :: set_intersection, а затем проверить, совпадает ли размер меньшего ввода с числом элементов, заполненных set_intersection.решение?

1 Ответ

37 голосов
/ 01 ноября 2010

Попробуйте это:

if (std::includes(set_one.begin(), set_one.end(),
                  set_two.begin(), set_two.end()))
{
// ...
}

О включает () .

Алгоритм include () сравнивает два отсортированные последовательности и возвращает true, если каждый элемент в диапазоне [start2, отделка2) содержится в диапазоне [начало1, конец1). Возвращает ложь иначе. включает в себя () предполагает, что последовательности сортируются с использованием оператор <(), или используя предикат сост. </p>

работает в

Максимум ((финиш1 - старт1) + (финиш2 - start2)) * 2 - выполнено 1 сравнение.

Плюс O (nlog (n)) для сортировки векторов. Вы не получите это быстрее, чем это.

...