Пересечение трех множеств - как сделать оптимальнее?

Все мы прекрасно знаем, как найти пересечение 2х множеств.

std::vector<int> va = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9            }; // Допустим, что они уже отсортированы
std::vector<int> vb = {0,    2,    4, 5, 6,       9, 11, 12, 13}; // 

std::vector<int> intersec;

std::set_intersection(va.begin(), va.end(), vb.begin(), vb.end(), std::back_inserter(intersec));

А как найти пересечение трех множеств?

std::vector<int> va = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9            }; // Допустим, что они уже отсортированы
std::vector<int> vb = {0,    2,    4, 5, 6,       9, 11, 12, 13}; // 
std::vector<int> vс = {0,    2,       5,          9,         13}; // 
  • Найти пересечения между va и vb
  • И потом найти пересечение между результатом предыдущего шага и vc?

Или лучше (оптимальнее по производительности) написать отдельный алгоритм для поиска пересечения сразу в трех множествах?


Ответы (0 шт):