C++ における STL の std::min_element アルゴリズム

胡金庫 2023年10月12日
  1. C++ で std::min_element アルゴリズムを使って範囲内の最小要素素を検索する
  2. C++ で std::minmax_element アルゴリズムを使用して、範囲内の最小要素と最大要素を検索する
C++ における STL の std::min_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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Algorithm