C++ における STL の std::min_element アルゴリズム
-
C++ で
std::min_element
アルゴリズムを使って範囲内の最小要素素を検索する -
C++ で
std::minmax_element
アルゴリズムを使用して、範囲内の最小要素と最大要素を検索する
この記事では、C++ で STL の std::min_element
アルゴリズムを使用する方法について説明します。
C++ で std::min_element
アルゴリズムを使って範囲内の最小要素素を検索する
STL アルゴリズムには、コンテナ範囲を操作できる一般的な最小/最大検索関数が含まれています。std::min_element
は、指定された範囲内の最小の要素を取得するこれらの関数の 1つです。比較関数が明示的に指定されていない場合、要素は演算子<
と比較されます。したがって、コンテナにユーザー定義オブジェクトが格納されている場合は、対応する演算子を定義する必要があります。
範囲は、LegacyForwardIterator
の要件を満たす必要があります。std::min_element
関数は 2つのイテレータを受け入れ、範囲内の最小の要素にイテレータを返します。範囲に最小要素の複数のインスタンスが含まれている場合、アルゴリズムはイテレータを最初のインスタンスに返します。指定された範囲が空の場合、2 番目の引数イテレータが返されます。
次の例は、vector
コンテナの std::min_element
の簡単な使用法を示しています。最小の要素の数値位置が必要な場合は、std::distance
関数を使用して計算する必要があることに注意してください。
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main() {
vector<string> v1 = {"ztop", "htop", "mtop", "ktop", "ptop"};
vector<int> v2 = {111, 43, 12, 41, 34, 54, 13};
auto ret = std::min_element(v1.begin(), v1.end());
cout << "min_element(v1): " << std::setw(4) << *ret
<< " at position: " << std::distance(v1.begin(), ret) << endl;
auto ret2 = std::min_element(v2.begin(), v2.end());
cout << "min_element(v2): " << std::setw(4) << *ret2
<< " at position: " << std::distance(v2.begin(), ret2) << endl;
return EXIT_SUCCESS;
}
min_element(v1): htop at position: 1
min_element(v2): 12 at position: 2
C++ で std::minmax_element
アルゴリズムを使用して、範囲内の最小要素と最大要素を検索する
STL に含まれるもう 1つの強力なアルゴリズムは、std::minmax_element
です。指定された範囲内の最小要素と最大要素の両方を取得します。std::minmax_element
は、最小の要素を最初のメンバーとして格納する std::pair
値を返します。範囲内の最大値に適格な値が複数ある場合、このアルゴリズムは最後の要素を返すことに注意してください。これらのアルゴリズムには両方とも、カスタム比較関数を示す 3 番目のパラメーターを含めることができるオーバーロードがあることに注意してください。
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main() {
vector<string> v1 = {"ztop", "htop", "mtop", "ktop", "ptop"};
vector<int> v2 = {111, 43, 12, 41, 34, 54, 13};
auto ret3 = std::minmax_element(v1.begin(), v1.end());
cout << "min (v1): " << std::setw(4) << *ret3.first
<< "| max (v1): " << std::setw(4) << *ret3.second << endl;
auto ret4 = std::minmax_element(v2.begin(), v2.end());
cout << "min (v2): " << std::setw(4) << *ret4.first
<< "| max (v2): " << std::setw(4) << *ret4.second << endl;
return EXIT_SUCCESS;
}
出力:
min (v1): htop| max (v1): ztop
min (v2): 12| max (v2): 111