std::minmax
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
在头文件 <algorithm> 中定义
|
||
template< class T > std::pair<const T&,const T&> minmax( const T& a, const T& b ); |
(1) | (C++11 起) |
template< class T, class Compare > std::pair<const T&,const T&> minmax( const T& a, const T& b, Compare comp ); |
(2) | (C++11 起) |
template< class T > std::pair<T,T> minmax( std::initializer_list<T> ilist); |
(3) | (C++11 起) |
template< class T, class Compare > std::pair<T,T> minmax( std::initializer_list<T> ilist, Compare comp ); |
(4) | (C++11 起) |
1-2)
返回两个值中的较小和较大.
原文:
Returns the smaller and the greater of the two values.
3-4)
返回的最小和最大的值在初始值的列表
ilist
原文:
Returns the smallest and the greatest of the values in initializer list
ilist
.(1,3)版本使用operator<的值进行比较,而(2,4)版本使用给定的比较函数
comp
.原文:
The (1,3) versions use operator< to compare the values, whereas the (2,4) versions use the given comparison function
comp
.目录 |
[编辑] 参数
a, b | - | 值进行比较
|
ilist | - | 初始化列表中的值进行比较
原文: initializer list with the values to compare |
comp | - | comparison function which returns true if 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 must not modify the objects passed to it. |
类型要求 | ||
-T 必须满足 LessThanComparable 的要求。 for the overloads (1) and (3)
| ||
-T 必须满足 CopyConstructible 的要求。 for the overloads (3) and (4)
|
[编辑] 返回值
1-2)
返回结果std::make_pair(a, b)如果
a<b
或者如果a
相当于b
。返回结果std::make_pair(b, a)如果b<a
.原文:
Returns the result of std::make_pair(a, b) if
a<b
or if a
is equivalent to b
. Returns the result of std::make_pair(b, a) if b<a
.3-4)
中的最小值作为第一个元素,并作为第二个最大
ilist
一对。如果几个元素是相当于最小,最左边的这样的元素将被返回。如果有几个元素是最大的,最右边的元素,则返回.原文:
A pair with the smallest value in
ilist
as the first element and the greatest as the second. If several elements are equivalent to the smallest, the leftmost such element is returned. If several elements are equivalent to the largest, the rightmost such element is returned.[编辑] 复杂度
1-2)
常数
3-4)
线性
ilist.size()
[编辑] 可能的实现
版本一 |
---|
template<class T> std::pair<const T&,const T&> minmax(const T& a, const T& b) { return (b < a) ? std::make_pair(b, a) : std::make_pair(a, b); } |
版本二 |
template<class T, class Compare> std::pair<const T&,const T&> minmax(const T& a, const T& b, Compare comp) { return comp(b, a) ? std::make_pair(b, a) : std::make_pair(a, b); } |
版本三 |
template< class T > std::pair<T,T> minmax( std::initializer_list ilist) { auto p = std::minmax_element(ilist.begin(), ilist.end()); return std::make_pair(*p.first, *p.second); } |
版本四 |
template< class T, class Compare > std::pair<T,T> minmax( std::initializer_list ilist, Compare comp ) { auto p = std::minmax_element(ilist.begin(), ilist.end(), comp); return std::make_pair(*p.first, *p.second); } |
[编辑] 示例
#include <algorithm> #include <iostream> #include <vector> #include <cstdlib> #include <ctime> int main() { std::vector<int> v {3, 1, 4, 1, 5, 9, 2, 6}; std::srand(std::time(0)); std::pair<int,int> bounds = std::minmax(std::rand() % v.size(), std::rand() % v.size()); std::cout << "v[" << bounds.first << "," << bounds.second << "]: "; for (int i = bounds.first; i < bounds.second; ++i) { std::cout << v[i] << ' '; } std::cout << '\n'; }
Possible output:
v[2,7]: 4 1 5 9 2
[编辑] 另请参阅
返回两个元素中的较小者 (函数模板) | |
返回两个元素中的较大者 (函数模板) |