O algoritmo std::min_element de STL em C++

Jinku Hu 12 outubro 2023
  1. Use o algoritmo std::min_element para encontrar o menor elemento no intervalo em C++
  2. Use o algoritmo std::minmax_element para encontrar o menor e o maior elemento no intervalo
O algoritmo std::min_element de STL em C++

Este artigo irá explicar como usar o algoritmo std::min_element do STL em C++.

Use o algoritmo std::min_element para encontrar o menor elemento no intervalo em C++

Os algoritmos STL incluem funções de pesquisa mínimo / máximo genéricas que podem operar em intervalos de contêiner. std::min_element é uma dessas funções que recupera o menor elemento no intervalo fornecido. Os elementos são comparados com operador < quando a função de comparação não é explicitamente especificada. Portanto, se o contêiner armazena os objetos definidos pelo usuário, ele deve ter o operador correspondente definido.

O intervalo deve satisfazer os requisitos de LegacyForwardIterator. A função std::min_element aceita dois iteradores e retorna o iterador para o menor elemento do intervalo. Se o intervalo incluir várias instâncias do menor elemento, o algoritmo retorna o iterador para o primeiro deles. Quando o intervalo fornecido está vazio, o segundo iterador do argumento é retornado.

O exemplo a seguir mostra o uso simples de std::min_element para o contêiner vector. Observe que quando queremos a posição numérica do menor elemento, deve-se utilizar a função std::distance para calculá-la.

#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

Use o algoritmo std::minmax_element para encontrar o menor e o maior elemento no intervalo

Outro algoritmo poderoso incluído no STL é std::minmax_element. Ele recupera os menores e os maiores elementos em um determinado intervalo. std::minmax_element retorna o valor std::pair armazenando o menor elemento como o primeiro membro. Observe que este algoritmo retorna o último elemento quando há vários valores qualificados para o maior valor no intervalo. Lembre-se de que esses dois algoritmos também têm sobrecargas que podem incluir o terceiro parâmetro que denota a função de comparação 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;
}

Produção:

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

Artigo relacionado - C++ Algorithm