std::minmax

提供: C++入門
2014年1月3日 (金) 23:43時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

std::minmax とは、2つの値から小さい値と大きい値を返す関数です。比較するための関数を指定することもできます。

読み方

std::minmax
えすてぃーでぃー みん まっくす

概要

最大、最小の両方の値ではなく、どちらか片方の値が必要な場合は、以下の関数を使用します。

std::max
大きい値を返す
std::min
小さい値を返す

ヘッダファイル

#include <algorithm>

定義

template< class T > 
std::pair<const T&,const T&> minmax( const T& a, const T& b );
template< class T, class Compare >
std::pair<const T&,const T&> minmax( const T& a, const T& b, Compare comp );
 
// C++11
template< class T >
std::pair<T,T> minmax( std::initializer_list<T> ilist);
// C++11
template< class T, class Compare >
std::pair<T,T> minmax( std::initializer_list<T> ilist, Compare comp );

minmax1.cpp の例

3つ目の比較では、ラムダ式を使用しているため、C++11に対応したコンパイラが必要です。 autoで扱っていますが、std::pairが返ってきます。

ソースコード minmax1.cpp

#include <algorithm>
#include <iostream>
#include <string>
#include <tuple>
using namespace std;
int main(int argc, char const* argv[])
{
        enum {MIN, MAX};
        auto t1 = minmax(1,999);
        cout << get<0>(t1) << " " << get<1>(t1) << endl;
 
        auto t2 = minmax('a','b');
        cout << get<0>(t2) << " " << get<1>(t2) << endl;
 
        auto t3 = minmax( { "foo", "bar", "hoge" },
                        [](const string& s1, const string& s2)
                        {
                        return s1.size() < s2.size();
                        }
                   );
        cout << get<0>(t3) << " " << get<1>(t3) << endl;
        auto t4 = minmax({1,2,3,4,5});
        cout << get<MIN>(t4) << " " << get<MAX>(t4) << endl;
        return 0;
}

コンパイル

g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \
-Wl,-rpath=/usr/local/lib/gcc49  minmax1.cpp -o minmax1

実行例

% ./minmax1
1 999
a b
foo hoge
1 5

関連項目




スポンサーリンク