```
template<class InputIterator1, class InputIterator2,
class OutputIterator>
OutputIterator
set_difference(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
template<class InputIterator1, class InputIterator2,
class OutputIterator, class Compare>
OutputIterator
set_difference(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
```

*Effects:*
Copies the elements of the range
[first1,last1)
which are not present in the range
[first2,last2)
to the range beginning at
result.
The elements in the constructed range are sorted.

*Requires:*
The resulting range shall not overlap with either of the original ranges.

*Returns:*
The end of the constructed range.

*Complexity:*
At most
2 * ((last1 - first1) + (last2 - first2)) - 1
comparisons.

*Remarks:*
If
[first1,last1)
contains m
elements that are equivalent to each other and
[first2,last2)
contains n
elements that are equivalent to them, the last
max(m - n, 0)
elements from
[first1,last1)
shall be copied to the output range.