目次
はじめに
C++で、vector
などのコンテナに格納された要素の中から、最小値や最大値を探し出したい、という場面は非常に多くあります。自前でループを書いて探すこともできますが、C++の標準ライブラリ <algorithm>
には、このための専用関数が用意されています。
std::min_element
: 範囲内の最小要素を指すイテレータを返す。std::max_element
: 範囲内の最大要素を指すイテレータを返す。std::minmax_element
: 最小要素と最大要素の両方を、ペアで一度に返す。
この記事では、これらの関数を使って、コンテナから最小値・最大値を安全かつ効率的に取得する方法を解説します。
最小値・最大値を取得するサンプルコード
このコードは、vector
に格納された数値の中から、min_element
, max_element
, minmax_element
の3つの関数を使って、最小値と最大値を探し出し、その値を表示します。
完成コード
#include <iostream>
#include <vector>
#include <algorithm> // min_element, max_element, minmax_element
using namespace std;
int main() {
vector<int> scores = {75, 92, 58, 100, 84, 65};
// --- 1. min_element と max_element を個別に使う ---
// min_elementは最小要素を指す「イテレータ」を返す
auto min_it = min_element(scores.begin(), scores.end());
// イテレータを間接参照(*)して、実際の値を取得
cout << "最低点数 (min_element): " << *min_it << endl;
// max_elementも同様に、最大要素を指すイテレータを返す
auto max_it = max_element(scores.begin(), scores.end());
cout << "最高点数 (max_element): " << *max_it << endl;
cout << "--------------------" << endl;
// --- 2. minmax_element を使って、一度に両方を取得する ---
auto minmax_pair = minmax_element(scores.begin(), scores.end());
cout << "最低点数 (minmax_element): " << *(minmax_pair.first) << endl;
cout << "最高点数 (minmax_element): " << *(minmax_pair.second) << endl;
return 0;
}
実行結果
最低点数 (min_element): 58
最高点数 (max_element): 100
--------------------
最低点数 (minmax_element): 58
最高点数 (minmax_element): 100
コードの解説
min_element
/ max_element
auto min_it = min_element(scores.begin(), scores.end());
- 戻り値は「イテレータ」: これらの関数が返すのは、最小値や最大値そのものではなく、その要素を指し示すイテレータである、という点が非常に重要です。イテレータは、コンテナ内の要素の位置を示す、ポインタのようなものです。
*min_it
: イテレータが指し示す先の実際の値を取得するには、アスタリスク*
を使って間接参照(デリファレンス)する必要があります。
minmax_element
auto minmax_pair = minmax_element(scores.begin(), scores.end());
- 戻り値は「ペア」: この関数は、最小要素を指すイテレータと、最大要素を指すイテレータのペア (
std::pair
) を返します。最小値と最大値の両方が必要な場合、min_element
とmax_element
を別々に呼び出すよりも、minmax_element
を一度だけ呼び出す方が効率的です。 *(minmax_pair.first)
: ペアの1番目の要素(.first
)に、最小要素を指すイテレータが格納されています。*(minmax_pair.second)
: ペアの2番目の要素(.second
)に、最大要素を指すイテレータが格納されています。
まとめ
今回は、C++の <algorithm>
ライブラリが提供する、コンテナの最小値・最大値を取得するための関数を解説しました。
min_element
,max_element
: それぞれ最小/最大の要素を指すイテレータを返す。minmax_element
: 最小/最大の要素を指すイテレータのペアを、より効率的に返す。- 実際の値を取得するには、返されたイテレータをアスタリスク
*
で間接参照する。
自前でループを書くよりも、これらの標準アルゴリズム関数を使った方が、コードが簡潔で意図が明確になり、多くの場合でより効率的に動作します。