std::minmax

来自cppreference.com
< cpp‎ | algorithm

 
 
算法库
执行策略 (C++17)
不修改的序列操作
(C++11)
(C++11)
(C++11)
(C++17)
修改的序列操作
未初始化存储上的操作
划分操作
排序操作
(C++11)
二分查找操作
集合操作(在已排序范围上)
堆操作
(C++11)
最小/最大操作
minmax
(C++11)
(C++17)

重排
数值操作
C 库
 
定义于头文件 <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.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
3-4)
返回的最小和最大的值在初始值的列表ilist
原文:
Returns the smallest and the greatest of the values in initializer list ilist.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
(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.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

目录

[编辑] 参数

a, b -
值进行比较
原文:
the values to compare
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
ilist -
初始化列表中的值进行比较
原文:
initializer list with the values to compare
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
comp - 比较函数对象(即满足比较Compare)要求的对象),若 if a is less than b,则返回 ​true

比较函数的签名应等价于如下者:

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

签名不需要拥有 const & ,但函数对象必须不修改传递给它的对象。
类型 Type1Type2 必须使得 T 类型的对象能隐式转换到这两个类型。 ​

类型要求
-
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.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
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.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 复杂度

1-2)
常数
原文:
Constant
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
3-4)
线性ilist.size()
原文:
Linear in ilist.size()
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 可能的实现

版本一
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';
}

可能的输出:

v[2,7]: 4 1 5 9 2

[编辑] 另请参阅

返回两个元素中的较小者
(函数模板) [编辑]
返回两个元素中的较大者
(函数模板) [编辑]