Пересечение трех множеств - как сделать оптимальнее?
Все мы прекрасно знаем, как найти пересечение 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?
Или лучше (оптимальнее по производительности) написать отдельный алгоритм для поиска пересечения сразу в трех множествах?