std.algorithm.setops.SetDifference/setDifference
- multiple declarations
Function setDifference
Lazily computes the difference of r1
and r2
. The two ranges
are assumed to be sorted by less
. The element types of the two
ranges must have a common type.
In the case of multisets, considering that element a
appears x
times in r1
and y
times and r2
, the number of occurences
of a
in the resulting range is going to be x-y
if x > y or 0 otherwise.
Parameters
Name | Description |
---|---|
less | Predicate the given ranges are sorted by. |
r1 | The first range. |
r2 | The range to subtract from r1 . |
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(setDifference(a, b), [5, 9]));
static assert(isForwardRange!(typeof(setDifference(a, b))));
// multisets
int[] x = [1, 1, 1, 2, 3];
int[] y = [1, 1, 2, 4, 5];
auto r = setDifference(x, y);
assert(equal(r, [1, 3]));
assert(setDifference(r, x) .empty);
Struct SetDifference
Lazily computes the difference of r1
and r2
. The two ranges
are assumed to be sorted by less
. The element types of the two
ranges must have a common type.
struct SetDifference(alias less, R1, R2)
if (isInputRange!R1 && isInputRange!R2);
In the case of multisets, considering that element a
appears x
times in r1
and y
times and r2
, the number of occurences
of a
in the resulting range is going to be x-y
if x > y or 0 otherwise.
Constructors
Name | Description |
---|---|
this
(r1, r2)
|
Properties
Name | Type | Description |
---|---|---|
empty [get]
|
bool | |
front [get]
|
auto | |
save [get]
|
typeof(this) |
Methods
Name | Description |
---|---|
popFront
()
|
Parameters
Name | Description |
---|---|
less | Predicate the given ranges are sorted by. |
r1 | The first range. |
r2 | The range to subtract from r1 . |
Returns
A range of the difference of 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(setDifference(a, b), [5, 9]));
static assert(isForwardRange!(typeof(setDifference(a, b))));
// multisets
int[] x = [1, 1, 1, 2, 3];
int[] y = [1, 1, 2, 4, 5];
auto r = setDifference(x, y);
assert(equal(r, [1, 3]));
assert(setDifference(r, x) .empty);