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 algoritms 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.
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)