サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <iostream>
#include <boost/tuple/tuple_io.hpp> // minmaxの返値がboost::tupleなので
#include <boost/algorithm/minmax.hpp>
#include <boost/algorithm/minmax_element.hpp>
using namespace std;
int main()
{
int a=20, b=10;
cout << boost::minmax(a,b) << endl;
int arr[5] = {123, 45, 67, 8, 90};
pair<int*,int*> r = boost::minmax_element( &arr[0], &arr[5] );
cout << *r.first << " " << *r.second << endl;
}
(10 20) 8 123
2つの値の小さい方と大きい方を両方欲しいとき、std::min と std::max を1回ずつ呼び出すのは、内部的に2回同じ比較演算が行われるので無駄です。
同様に、シーケンス中の最小値と最大値を得たいとき、std::min_element と std::max_element を1回ずつ呼び出すのは、2回も同じシーケンスを見ないといけないので無駄です。
…というわけで、1回の呼び出しで最小値と最大値のpairを返すよう実装された関数minmaxと、 同minmax_elementを提供するのがこのライブラリです。これまたニッチなライブラリですね。 さらにおまけとして、first_min_element や last_max_element のような、 複数最大/最小値があるときどの位置を返すかまで指定できるバージョンなども提供されています。