| Home | Libraries | People | FAQ | More

##### set_symmetric_difference

###### Prototype

    template<
        class SinglePassRange1,
        class SinglePassRange2,
        class OutputIterator
        >
    OutputIterator
    set_symmetric_difference(const SinglePassRange1& rng1,
                             const SinglePassRange2& rng2,
                             OutputIterator          out);

    template<
        class SinglePassRange1,
        class SinglePassRange2,
        class OutputIterator,
        class BinaryPredicate
        >
    OutputIterator
    set_symmetric_difference(const SinglePassRange1& rng1,
                             const SinglePassRange2& rng2,
                             OutputIterator          out,
                             BinaryPredicate         pred);

###### Description

`set_symmetric_difference` constructs a sorted range that is the set symmetric difference of the sorted ranges `rng1` and `rng2`. The return value is the end of the output range.

The ordering relationship is determined by using `operator<` in the non-predicate versions, and by evaluating `pred` in the predicate versions.

###### Definition

Defined in the header file `boost/range/algorithm/set_algorithm.hpp`

###### Requirements

For the non-predicate versions:

- `SinglePassRange1` is a model of the Single Pass Range Concept.
- `SinglePassRange2` is a model of the Single Pass Range Concept.
- `OutputIterator` is a model of the `OutputIteratorConcept`.
- `SinglePassRange1` and `SinglePassRange2` have the same value type.
- `SinglePassRange1`'s value type is a model of the `LessThanComparableConcept`.
- `SinglePassRange2`'s value type is a model of the `LessThanComparableConcept`.
- The ordering of objects of type `SinglePassRange1`'s value type is a strict weak ordering, as defined in the `LessThanComparableConcept` requirements.
- The ordering of objects of type `SinglePassRange2`'s value type is a strict weak ordering, as defined in the `LessThanComparableConcept` requirements.

For the predicate versions:

- `SinglePassRange1` is a model of the Single Pass Range Concept.
- `SinglePassRange2` is a model of the Single Pass Range Concept.
- `OutputIterator` is a model of the `OutputIteratorConcept`.
- `SinglePassRange1` and `SinglePassRange2` have the same value type.
- `BinaryPredicate` is a model of the `StrictWeakOrderingConcept`.
- `SinglePassRange1`'s value type is convertible to `BinaryPredicate`'s first argument type.
- `SinglePassRange2`'s value type is convertible to `BinaryPredicate`'s second argument types.

###### Precondition:

For the non-predicate versions:

`rng1` and `rng2` are sorted in ascending order according to `operator<`.

For the predicate versions:

`rng1` and `rng2` are sorted in ascending order according to `pred`.

###### Complexity

Linear. `O(N)`, where `N` is `distance(rng1) + distance(rng2)`.