set_intersection
Материал из cppreference.com
Синтаксис:
#include <algorithm> template< typename InIterA, typename InIterB, typename OutIter > OutIter set_intersection( InIterA start1, InIterA end1, InIterB start2, InIterB end2, OutIter result ); template< typename InIterA, typename InIterB, typename OutIter, typename StrictWeakOrdering > OutIter set_intersection( InIterA start1, InIterA end1, InIterB start2, InIterB end2, OutIter result, StrictWeakOrdering cmp );
Алгоритм set_intersection() вычисляет пересечение двух множеств, определенных как [start1,end1) и [start2,end2) и располагает пересечение начиная с result.
Оба множества заданы как диапазоны и должны быть отсортированы по возрастанию.
Возвращаемое значение функции - итератор на конец диапазона пересечения.
set_intersection() работает за линейное время.
Если требуется повышенная точность, вводится сравнивающая функция-объект cmp, которая используется вместо оператора < для сравнения элементов.
Пример:
// пример set_intersection #include <iostream> #include <algorithm> #include <vector> using namespace std; int main () { int first[] = {5,10,15,20,25}; int second[] = {50,40,30,20,10}; vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0 vector<int>::iterator it; sort (first,first+5); // 5 10 15 20 25 sort (second,second+5); // 10 20 30 40 50 it=set_intersection (first, first+5, second, second+5, v.begin()); // 10 20 0 0 0 0 0 0 0 0 cout << "intersection has " << int(it - v.begin()) << " elements.\n"; return 0; }
Вывод: intersection has 2 elements
Смотрите также: includes, set_difference, set_symmetric_difference, set_union