El algoritmo std::min_element de STL en C++

Jinku Hu 12 octubre 2023
  1. Utilice el algoritmo std::min_element para encontrar el elemento más pequeño en el rango en C++
  2. Utilice el algoritmo std::minmax_element para encontrar el elemento más pequeño y el elemento más grande en el rango
El algoritmo std::min_element de STL en C++

Este artículo explicará cómo utilizar el algoritmo std::min_element de STL en C++.

Utilice el algoritmo std::min_element para encontrar el elemento más pequeño en el rango en C++

Los algoritmos STL incluyen funciones genéricas de búsqueda mínima / máxima que pueden operar en rangos de contenedores. std::min_element es una de estas funciones que recupera el elemento más pequeño en el rango dado. Los elementos se comparan con operador< cuando la función de comparación no se especifica explícitamente. Entonces, si el contenedor almacena los objetos definidos por el usuario, debe tener definido el operador correspondiente.

El rango debe satisfacer los requisitos de LegacyForwardIterator. La función std::min_element acepta dos iteradores y devuelve el iterador al elemento más pequeño del rango. Si el rango incluye varias instancias del elemento más pequeño, el algoritmo devuelve el iterador al primero de ellos. Cuando el rango dado está vacío, se devuelve el segundo iterador de argumento.

El siguiente ejemplo muestra el uso simple de std::min_element para el contenedor vector. Observe que cuando queremos la posición numérica del elemento más pequeño, se debe utilizar la función std::distance para calcularlo.

#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

Utilice el algoritmo std::minmax_element para encontrar el elemento más pequeño y el elemento más grande en el rango

Otro poderoso algoritmo incluido en STL es std::minmax_element. Recupera tanto los elementos más pequeños como los más grandes en el rango dado. std::minmax_element devuelve el valor std::par almacenando el elemento más pequeño como el primer miembro. Tenga en cuenta que este algoritmo devuelve el último elemento cuando hay varios valores que califican para el mayor valor en el rango. Tenga en cuenta que ambos algoritmos también tienen sobrecargas que pueden incluir el tercer parámetro que denota la función de comparación personalizada.

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

Producción :

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

Artículo relacionado - C++ Algorithm