Function std.algorithm.searching.minCount
Computes the minimum (respectively maximum) of range
along with its number of
occurrences. Formally, the minimum is a value x
in range
such that pred(a, x)
is false
for all values a
in range
. Conversely, the maximum is
a value x
in range
such that pred(x, a)
is false
for all values a
in range
(note the swapped arguments to pred
).
Tuple!(ElementType!Range,size_t) minCount(alias pred, Range)
(
Range range
)
if (isInputRange!Range && !isInfinite!Range && is(typeof(binaryFun!pred(range .front, range .front))));
These functions may be used for computing arbitrary extrema by choosing pred
appropriately. For corrrect functioning, pred
must be a strict partial order,
i.e. transitive (if pred(a, b) && pred(b, c)
then pred(a, c)
) and
irreflexive (pred(a, a)
is false
). The trichotomy property of
inequality is not required: these algorithms consider elements a
and b
equal
(for the purpose of counting) if pred
puts them in the same equivalence class,
i.e. !pred(a, b) && !pred(b, a)
.
Parameters
Name | Description |
---|---|
pred | The ordering predicate to use to determine the extremum (minimum or maximum). |
range | The input range to count. |
Returns
The minimum, respectively maximum element of a range together with the number it occurs in the range.
Limitations
If at least one of the arguments is NaN, the result is
an unspecified value. See maxElement
for examples on how to cope with NaNs.
Throws
Exception
if range
.
See Also
Example
import std .conv : text;
import std .typecons : tuple;
int[] a = [ 2, 3, 4, 1, 2, 4, 1, 1, 2 ];
// Minimum is 1 and occurs 3 times
writeln(a .minCount); // tuple(1, 3)
// Maximum is 4 and occurs 2 times
writeln(a .maxCount); // tuple(4, 2)