## set_intersection

Syntax:

```    #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 );```

The set_intersection() algorithm computes the intersection of the two sets defined by [start1,end1) and [start2,end2) and stores the intersection starting at result.

Both of the sets, given as ranges, must be sorted in ascending order.

The return value of set_intersection() is an iterator to the end of the intersection range.

set_intersection() runs in linear time.

If the strict weak ordering comparison function object cmp is not specified, set_intersection() will use the < operator to compare elements.

Example

```// set_intersection example
#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;
}```

Output: intersection has 2 elements

Related Topics: includes, set_difference, set_symmetric_difference, set_union