Der std::min_element-Algorithmus aus STL in C++
-
Verwenden Sie den
std::min_element
-Algorithmus, um das kleinste Element im Bereich in C++ zu finden -
Verwenden Sie den
std::minmax_element
-Algorithmus, um das kleinste und das größte Element im Bereich zu finden
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
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