123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- [/
- Copyright (c) 2008-2010 Joachim Faulhaber
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
- ]
- [/ //= Symmetric Difference ===================================================]
- [section Symmetric Difference]
- [section Synopsis][/ Symmetric difference]
- [table
- [[Symmetric difference] [__ch_itv_sets__][__ch_itv_maps__][__ch_ele_sets__][__ch_ele_maps__] ]
- [[`T& T::flip(const P&)`] [__ei] [__bp] [ ] [__b] ]
- [[`T& flip(T&, const P&)`] [__ei] [__bp] [__e] [__b] ]
- [[`T& operator ^=(T&, const P&)`] [__eiS] [__bpM] [__es] [__bm] ]
- [[`T operator ^ (T, const P&)`\n
- `T operator ^ (const P&, T)`] [__eiS] [__bpM] [__es] [__bm] ]
- ]
- Functions and operators that implement ['*symmetric difference*] on *icl* objects
- are given in the table above.
- [table
- [[] [Description of symmetric difference]]
- [[`Sets`][`operator ^` implements ['*set symmetric difference*]]]
- [[`Maps`][`operator ^` implements a ['*map symmetric difference*]
- function similar to /set symmetric difference/.
- All pairs that are common to both arguments are removed. All others unified.
- ]]
- ]
- [endsect][/ Synopsis Symmetric difference]
- [section Functions][/ Symmetric difference]
- /Symmetric difference/ is implemented on interval containers
- by the function `T& flip(T&, const P& operand)`.
- ``
- flip(y,x)
- ``
- deletes every element of `y`,
- if it is contained in `x`. Elements of
- `x` not contained in `y` are added.
- For icl containers flip is also availabel as memeber function
- `T& T::flip(const P& operand)`.
- [/ paratract, surtract, symetract, topple, symmetric_subtract]
- The admissible combinations of types for member function
- `T& T::flip(const P&)` can be summarized in the
- ['*overload table*] below:
- ``
- /* overload table for */ T\P| e i b p
- T& T::flip(const P&) ---+--------
- T& flip(T&, const P&) s | s
- m | m
- S | S S
- M | M M
- ``
- The next table contains complexity characteristics for functions `flip`.
- [table Time Complexity for member functions flip on icl containers
- [[`T& T::flip(const P&)`\n
- `T& flip(T&, const P&)`] [__ch_dom_t__][__ch_itv_t__][__ch_dom_mp_t__][__ch_itv_mp_t__]]
- [[__icl_set__] [__Olgn__] [] [] [] ]
- [[__icl_map__] [] [] [__Olgn__][] ]
- [[__itv_set__\n__sep_itv_set__][__Olgn__] [__On__] [] [] ]
- [[__spl_itv_set__] [__Olgn__] [__On__] [] [] ]
- [[__itv_map__\n__spl_itv_map__][] [] [__Olgn__][__On__] ]
- ]
- [endsect][/ Member functions Symmetric difference]
- [section Inplace operators][/ Symmetric Difference]
- The overload tables below are giving admissible
- type combinations for `operator ^=`
- that implements ['*symmetric difference*].
- ``
- // overload tables for element containers: interval containers:
- T& operator ^= (T&, const P&) ^= | e b s m ^= | e i b p S M
- ---+-------- ---+------------
- s | s s S | S S S
- m | m m M | M M M
- ``
- Complexity characteristics for inplace operators
- that implement ['*symmetric difference*]
- are given by the next tables where
- ``
- n = iterative_size(y);
- m = iterative_size(x); //if P is a container
- ``
- [table Time Complexity for inplace symmetric difference on element containers
- [[`T& operator &= (T& y, const P& x)`][__ch_dom_t__][__ch_dom_mp_t__][__ch_icl_set__][__ch_icl_map__]]
- [[__icl_set__] [__Olgn__] [] [__Omlgn__] [] ]
- [[__icl_map__] [__Olgn__] [__Olgn__] [__Omlgn__] [__Omlgn__] ]
- ]
- [table Time Complexity for inplace symmetric difference on interval containers
- [[`T& operator &= (T&, const P&)`][__ch_dom_t__][__ch_itv_t__][__ch_dom_mp_t__][__ch_itv_mp_t__][__ch_itv_sets__][__ch_itv_maps__]]
- [[interval_sets] [__Olgn__] [__On__] [] [] [__Omlgnpm__] [] ]
- [[interval_maps] [__Olgn__] [__On__] [__Olgn__] [__On__] [__Omlgnpm__] [__Omlgnpm__] ]
- ]
- [endsect][/ Inplace operators Symmetric Difference]
- [section Infix operators][/ Symmetric Difference]
- For the infix version of symmetric difference the
- following overloads are available:
- ``
- // overload tables for element containers: interval containers:
- T operator ^ (T, const P&) ^ | e b s m ^ | e i b p S1 S2 S3 M1 M3
- T operator ^ (const P&, T) ---+-------- ---+---------------------------
- e | s e | S1 S2 S3
- b | m i | S1 S2 S3
- s | s s b | M1 M3
- m | m m p | M1 M3
- S1 | S1 S1 S1 S2 S3
- S2 | S2 S2 S2 S2 S3
- S3 | S3 S3 S3 S3 S3
- M1 | M1 M1 M1 M3
- M3 | M3 M3 M3 M3
- ``
- To resolve ambiguities among interval containers
- the ['*finer*] container type is chosen as result type.
- [endsect][/ Infix operators Symmetric Difference]
- ['*See also . . .*]
- [table
- []
- [[[link boost_icl.function_reference.intersection ['*Intersection*]] ]]
- [[[link boost_icl.function_reference.subtraction ['*Subtraction*]] ]]
- [[[link boost_icl.function_reference.addition ['*Addition*]] ]]
- ]
- ['*Back to section . . .*]
- [table
- []
- [[[link function_synopsis_table ['*Function Synopsis*]] ]]
- [[[link boost_icl.interface ['*Interface*]] ]]
- ]
- [endsect][/ Symmetric Difference]
|