std::min (3) Linux Manual Page
std::min – std::min
Synopsis
Defined in header<algorithm>
template <class T>
(until C++ 14)
const T &min(const T &a, const T &b);
template <class T>
(since C++ 14)
constexpr const T &min(const T &a, const T &b);
template <class T, class Compare>
(until C++ 14)
const T &min(const T &a, const T &b, Compare comp);
template <class T, class Compare>
(since C++ 14)
constexpr const T &min(const T &a, const T &b, Compare comp);
(1)
template <class T>
(since C++ 11)
T min(std::initializer_list<T> ilist);
(2)(until C++ 14)
template <class T>
(since C++ 14)
constexpr T min(std::initializer_list<T> ilist);
(3)
template <class T, class Compare>
(since C++ 11)
T min(std::initializer_list<T> ilist, Compare comp);
(4)(until C++ 14)
template <class T, class Compare>
(since C++ 14)
constexpr T min(std::initializer_list<T> ilist, Compare comp);
Returns the smaller of the given values.
1-2) Returns the smaller of a and b.
3-4) Returns the smallest of the values in initializer list ilist.
The (1,3) versions use operator< to compare the values, the (2,4) versions use the given comparison function comp.
Parameters
a, b – the values to compare
ilist – initializer list with the values to compare
cmp – While the signature does not need to have const &, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) Type1 and Type2 regardless of value_category (thus, Type1 & is not allowed
Type requirements
–
T must meet the requirements of LessThanComparable in order to use overloads (1,3).
–
T must meet the requirements of CopyConstructible in order to use overloads (3,4).
Return value
1-2) The smaller of a and b. If the values are equivalent, returns a.
3-4) The smallest value in ilist. If several values are equivalent to the smallest, returns the leftmost such value.
Complexity
1-2) Exactly one comparison
3-4) Exactly ilist.size() – 1 comparisons
Possible implementation
First version
Second version
Third version
Fourth version
Warning
Capturing the result of std::min by reference if one of the parameters is rvalue produces a dangling reference if that parameter is returned:
Example
// Run this code
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::cout << "smaller of 1 and 9999: " << std::min(1, 9999) << '\n'
<< "smaller of 'a', and 'b': " << std::min('a', 'b') << '\n'
<< "shortest of \"foo\", \"bar\", and \"hello\": " << std::min({"foo", "bar", "hello"}, [](const std::string &s1, const std::string &s2) {
return s1.size() < s2.size();
})
<< '\n';
}
Output:
See also
max (function template)
minmax returns the smaller and larger of two elements
(C++11)
min_element (function template)
