std.algorithm.setops.SetSymmetricDifference/setSymmetricDifference - multiple declarations
Function setSymmetricDifference
Lazily computes the symmetric difference of r1 and r2,
i.e. the elements that are present in exactly one of r1 and r2. The two ranges are assumed to be sorted by less, and the
output is also sorted by less. The element types of the two
ranges must have a common type.
If both ranges are sets (without duplicated elements), the resulting
range is going to be a set. If at least one of the ranges is a multiset,
the number of occurences of an element x in the resulting range is abs(a-b)
where a is the number of occurences of x in r1, b is the number of
occurences of x in r2, and abs is the absolute value.
If both arguments are ranges of L-values of the same type then
SetSymmetricDifference will also be a range of L-values of
that type.
Parameters
| Name | Description |
|---|---|
| less | Predicate the given ranges are sorted by. |
| r1 | The first range. |
| r2 | The second range. |
Returns
See also
Example
import std .algorithm .comparison : equal;
import std .range .primitives : isForwardRange;
// sets
int[] a = [ 1, 2, 4, 5, 7, 9 ];
int[] b = [ 0, 1, 2, 4, 7, 8 ];
assert(equal(setSymmetricDifference(a, b), [0, 5, 8, 9][]));
static assert(isForwardRange!(typeof(setSymmetricDifference(a, b))));
//mutisets
int[] c = [1, 1, 1, 1, 2, 2, 2, 4, 5, 6];
int[] d = [1, 1, 2, 2, 2, 2, 4, 7, 9];
assert(equal(setSymmetricDifference(c, d), setSymmetricDifference(d, c)));
assert(equal(setSymmetricDifference(c, d), [1, 1, 2, 5, 6, 7, 9]));
Struct SetSymmetricDifference
Lazily computes the symmetric difference of r1 and r2,
i.e. the elements that are present in exactly one of r1 and r2. The two ranges are assumed to be sorted by less, and the
output is also sorted by less. The element types of the two
ranges must have a common type.
struct SetSymmetricDifference(alias less, R1, R2)
if (isInputRange!R1 && isInputRange!R2);
If both ranges are sets (without duplicated elements), the resulting
range is going to be a set. If at least one of the ranges is a multiset,
the number of occurences of an element x in the resulting range is abs(a-b)
where a is the number of occurences of x in r1, b is the number of
occurences of x in r2, and abs is the absolute value.
If both arguments are ranges of L-values of the same type then
SetSymmetricDifference will also be a range of L-values of
that type.
Constructors
| Name | Description |
|---|---|
this
(r1, r2)
|
Properties
| Name | Type | Description |
|---|---|---|
empty[get]
|
bool | |
front[get]
|
auto | |
save[get]
|
typeof(this) |
Methods
| Name | Description |
|---|---|
opSlice
()
|
|
popFront
()
|
Parameters
| Name | Description |
|---|---|
| less | Predicate the given ranges are sorted by. |
| r1 | The first range. |
| r2 | The second range. |
Returns
A range of the symmetric difference between r1 and r2.
See also
Example
import std .algorithm .comparison : equal;
import std .range .primitives : isForwardRange;
// sets
int[] a = [ 1, 2, 4, 5, 7, 9 ];
int[] b = [ 0, 1, 2, 4, 7, 8 ];
assert(equal(setSymmetricDifference(a, b), [0, 5, 8, 9][]));
static assert(isForwardRange!(typeof(setSymmetricDifference(a, b))));
//mutisets
int[] c = [1, 1, 1, 1, 2, 2, 2, 4, 5, 6];
int[] d = [1, 1, 2, 2, 2, 2, 4, 7, 9];
assert(equal(setSymmetricDifference(c, d), setSymmetricDifference(d, c)));
assert(equal(setSymmetricDifference(c, d), [1, 1, 2, 5, 6, 7, 9]));