Min is an overloaded name; there are actually two
min functions.
template <class T> const T& min(const T& a, const T& b);
template <class T, class BinaryPredicate>
const T& min(const T& a, const T& b, BinaryPredicate comp);
Description
Min returns the lesser of its two arguments; it returns the first
argument if neither is less than the other.
The two versions of min differ in how they define whether one
element is less than another. The first version compares
objects using operator<, and the second compares objects using
the function objectcomp.