L'algorithme std::min_element de STL en C++

Jinku Hu 12 octobre 2023
  1. Utilisez l’algorithme std::min_element pour trouver le plus petit élément de la plage en C++
  2. Utilisez l’algorithme std::minmax_element pour trouver le plus petit élément et le plus grand élément dans la plage
L'algorithme std::min_element de STL en C++

Cet article explique comment utiliser l’algorithme std::min_element de STL en C++.

Utilisez l’algorithme std::min_element pour trouver le plus petit élément de la plage en C++

Les algorithmes STL incluent des fonctions de recherche génériques minimum/maximum qui peuvent fonctionner sur des plages de conteneurs. std::min_element est l’une de ces fonctions qui récupère le plus petit élément dans la plage donnée. Les éléments sont comparés à operator< lorsque la fonction de comparaison n’est pas explicitement spécifiée. Ainsi, si le conteneur stocke les objets définis par l’utilisateur, l’opérateur correspondant doit être défini.

La gamme doit satisfaire aux exigences de LegacyForwardIterator. La fonction std::min_element accepte deux itérateurs et renvoie l’itérateur au plus petit élément de la plage. Si la plage comprend plusieurs instances du plus petit élément, l’algorithme renvoie l’itérateur au premier d’entre eux. Lorsque la plage donnée est vide, le deuxième argument itérateur est renvoyé.

L’exemple suivant montre l’utilisation simple de std::min_element pour le conteneur vector. Notez que lorsque nous voulons la position numérique du plus petit élément, il faut utiliser la fonction std::distance pour le calculer.

#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

Utilisez l’algorithme std::minmax_element pour trouver le plus petit élément et le plus grand élément dans la plage

Un autre algorithme puissant inclus dans STL est std::minmax_element. Il récupère à la fois les éléments les plus petits et les plus grands dans la plage donnée. std::minmax_element renvoie la valeur std::pair stockant le plus petit élément comme premier membre. Notez que cet algorithme renvoie le dernier élément lorsqu’il existe plusieurs valeurs se qualifiant pour la plus grande valeur de la plage. N’oubliez pas que ces deux algorithmes ont également des surcharges qui peuvent inclure le troisième paramètre indiquant la fonction de comparaison personnalisée.

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

Production:

min (v1): htop| max (v1): ztop
min (v2):   12| max (v2):  111
Auteur: 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

Article connexe - C++ Algorithm