Der std::min_element-Algorithmus aus STL in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie den std::min_element-Algorithmus, um das kleinste Element im Bereich in C++ zu finden
  2. Verwenden Sie den std::minmax_element-Algorithmus, um das kleinste und das größte Element im Bereich zu finden
Der std::min_element-Algorithmus aus STL in C++

Dieser Artikel erklärt, wie man den std::min_element-Algorithmus von STL in C++ verwendet.

Verwenden Sie den std::min_element-Algorithmus, um das kleinste Element im Bereich in C++ zu finden

STL-Algorithmen umfassen generische Minimum-/Maximum-Suchfunktionen, die auf Containerbereiche angewendet werden können. std::min_element ist eine dieser Funktionen, die das kleinste Element im angegebenen Bereich abruft. Die Elemente werden mit operator< verglichen, wenn die Vergleichsfunktion nicht explizit angegeben ist. Wenn der Container also die benutzerdefinierten Objekte speichert, muss der entsprechende Operator definiert sein.

Das Sortiment soll den Anforderungen von LegacyForwardIterator genügen. Die Funktion std::min_element akzeptiert zwei Iteratoren und gibt den Iterator zum kleinsten Element im Bereich zurück. Wenn der Bereich mehrere Instanzen des kleinsten Elements umfasst, gibt der Algorithmus den Iterator an das erste von ihnen zurück. Wenn der angegebene Bereich leer ist, wird der zweite Argumentiterator zurückgegeben.

Das folgende Beispiel zeigt die einfache Verwendung von std::min_element für den Container vector. Beachten Sie, dass Sie die Funktion std::distance verwenden sollten, um die numerische Position des kleinsten Elements zu berechnen.

#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

Verwenden Sie den std::minmax_element-Algorithmus, um das kleinste und das größte Element im Bereich zu finden

Ein weiterer mächtiger Algorithmus, der in STL enthalten ist, ist std::minmax_element. Es ruft sowohl die kleinsten als auch die größten Elemente im angegebenen Bereich ab. std::minmax_element gibt den Wert std::pair zurück und speichert das kleinste Element als erstes Element. Beachten Sie, dass dieser Algorithmus das letzte Element zurückgibt, wenn mehrere Werte vorhanden sind, die sich für den größten Wert im Bereich qualifizieren. Beachten Sie, dass diese beiden Algorithmen auch Überladungen haben, die den dritten Parameter enthalten können, der die benutzerdefinierte Vergleichsfunktion bezeichnet.

#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;
}

Ausgabe:

min (v1): htop| max (v1): ztop
min (v2):   12| max (v2):  111
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Algorithm