The Wayback Machine - https://web.archive.org/web/20180506154622/http://en.cppreference.com:80/w/cpp/algorithm/max
Namespaces
Variants
Actions

std::max

From cppreference.com
< cpp‎ | algorithm
 
 
Algorithm library
Execution policies (C++17)
Non-modifying sequence operations
(C++11)(C++11)(C++11)
(C++17)
Modifying sequence operations
Operations on uninitialized storage
Partitioning operations
Sorting operations
Binary search operations
Set operations (on sorted ranges)
Heap operations
(C++11)
Minimum/maximum operations
(C++11)
(C++17)
Permutations
Numeric operations
C library
 
Defined in header <algorithm>
(1)
template<class T >
const T& max(const T& a, const T& b );
(until C++14)
template<class T >
constexprconst T& max(const T& a, const T& b );
(since C++14)
(2)
template<class T, class Compare >
const T& max(const T& a, const T& b, Compare comp );
(until C++14)
template<class T, class Compare >
constexprconst T& max(const T& a, const T& b, Compare comp );
(since C++14)
(3)
template<class T >
T max(std::initializer_list<T> ilist );
(since C++11)
(until C++14)
template<class T >
constexpr T max(std::initializer_list<T> ilist );
(since C++14)
(4)
template<class T, class Compare >
T max(std::initializer_list<T> ilist, Compare comp );
(since C++11)
(until C++14)
template<class T, class Compare >
constexpr T max(std::initializer_list<T> ilist, Compare comp );
(since C++14)

Returns the greater of the given values.

1-2) Returns the greater of a and b.
3-4) Returns the greatest 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.

Contents

[edit]Parameters

a, b - the values to compare
ilist - initializer list with the values to compare
comp - comparison function object (i.e. an object that satisfies the requirements of Compare) which returns ​true if a is less than b.

The signature of the comparison function should be equivalent to the following:

 bool cmp(const Type1 &a, const Type2 &b);

The signature does not need to have const&, but the function object must not modify the objects passed to it.
The types Type1 and Type2 must be such that an object of type T can be implicitly converted to both of them. ​

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

[edit]Return value

1-2) The greater of a and b. If they are equivalent, returns a.
3-4) The greatest value in ilist. If several values are equivalent to the greatest, returns the leftmost one.

[edit]Complexity

1-2) Exactly one comparison
3-4) Exactly ilist.size() - 1 comparisons

[edit]Possible implementation

First version
template<class T>const T& max(const T& a, const T& b){return(a < b)? b : a;}
Second version
template<class T, class Compare>const T& max(const T& a, const T& b, Compare comp){return(comp(a, b))? b : a;}
Third version
template<class T > T max(std::initializer_list<T> ilist){return*std::max_element(ilist.begin(), ilist.end());}
Fourth version
template<class T, class Compare > T max(std::initializer_list<T> ilist, Compare comp ){return*std::max_element(ilist.begin(), ilist.end(), comp);}

[edit]Notes

Capturing the result of std::max by reference if one of the parameters is rvalue produces a dangling reference if that parameter is returned:

int n =1;constint& r = std::max(n-1, n+1);// r is dangling

[edit]Example

#include <algorithm>#include <iostream>#include <string>   int main(){std::cout<<"larger of 1 and 9999: "<< std::max(1, 9999)<<'\n'<<"larger of 'a', and 'b': "<< std::max('a', 'b')<<'\n'<<"longest of \"foo\", \"bar\", and \"hello\": "<< std::max({"foo", "bar", "hello"}, [](conststd::string& s1, conststd::string& s2){return s1.size()< s2.size();})<<'\n';}

Output:

larger of 1 and 9999: 9999 larger of 'a', and 'b': b longest of "foo", "bar", and "hello": hello

[edit]See also

returns the smaller of the given values
(function template)[edit]
(C++11)
returns the smaller and larger of two elements
(function template)[edit]
returns the largest element in a range
(function template)[edit]
close