Function std.algorithm.searching.minPos
Computes a subrange of range
starting at the first occurrence of range
's
minimum (respectively maximum) and with the same ending as range
, or the
empty range if range
itself is empty.
Range minPos(alias pred, Range)
(
Range range
)
if (isForwardRange!Range && !isInfinite!Range && is(typeof(binaryFun!pred(range .front, range .front))));
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
).
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
).
Parameters
Name | Description |
---|---|
pred | The ordering predicate to use to determine the extremum (minimum or maximum) element. |
range | The forward range to search. |
Returns
The position of the minimum (respectively maximum) element of forward
range range
, i.e. a subrange of range
starting at the position of its
smallest (respectively largest) element and with the same ending as 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.
See Also
Example
int[] a = [ 2, 3, 4, 1, 2, 4, 1, 1, 2 ];
// Minimum is 1 and first occurs in position 3
writeln(a .minPos); // [1, 2, 4, 1, 1, 2]
// Maximum is 4 and first occurs in position 2
writeln(a .maxPos); // [4, 1, 2, 4, 1, 1, 2]