boost::minmax

トップページ > アルゴリズム >

abstract

必要なヘッダ
<boost/algorithm/minmax.hpp>
<boost/algorithm/minmax_element.hpp>
出来ること
minとmaxを一発で両方返すアルゴリズム
リファレンス
en

sample

サンプルの動作確認バージョン [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

etc

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 のような、 複数最大/最小値があるときどの位置を返すかまで指定できるバージョンなども提供されています。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0