C++에서 STL의 std::min_element 알고리즘

Jinku Hu 2023년10월12일
  1. std::min_element 알고리즘을 사용하여 C++의 범위에서 가장 작은 요소 찾기
  2. std::minmax_element 알고리즘을 사용하여 범위에서 가장 작은 요소와 가장 큰 요소 찾기
C++에서 STL의 std::min_element 알고리즘

이 기사에서는 C++에서 STL의 std::min_element 알고리즘을 사용하는 방법을 설명합니다.

std::min_element 알고리즘을 사용하여 C++의 범위에서 가장 작은 요소 찾기

STL 알고리즘에는 컨테이너 범위에서 작동할 수 있는 일반적인 최소/최대 검색 기능이 포함됩니다. std::min_element는 주어진 범위에서 가장 작은 요소를 검색하는 이러한 함수 중 하나입니다. 비교 기능이 명시적으로 지정되지 않은 경우 요소는 operator<와 비교됩니다. 따라서 컨테이너가 사용자 정의 개체를 저장하는 경우 해당 연산자가 정의되어 있어야 합니다.

범위는 LegacyForwardIterator의 요구 사항을 충족해야 합니다. std::min_element 함수는 두 개의 반복자를 허용하고 범위에서 가장 작은 요소로 반복자를 반환합니다. 범위가 가장 작은 요소의 여러 인스턴스를 포함하는 경우 알고리즘은 반복자를 첫 번째 요소로 반환합니다. 지정된 범위가 비어 있으면 두 번째 인수 iterator가 반환됩니다.

다음 예는 vector 컨테이너에 대한 std::min_element의 간단한 사용법을 보여줍니다. 가장 작은 요소의 숫자 위치를 원할 때 std::distance 함수를 사용하여 계산해야 합니다.

#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

std::minmax_element 알고리즘을 사용하여 범위에서 가장 작은 요소와 가장 큰 요소 찾기

STL에 포함된 또 다른 강력한 알고리즘은 std::minmax_element입니다. 주어진 범위에서 가장 작은 요소와 가장 큰 요소를 모두 검색합니다. std::minmax_element는 가장 작은 요소를 첫 번째 멤버로 저장하는 std::pair 값을 반환합니다. 이 알고리즘은 범위에서 가장 큰 값에 해당하는 여러 값이 있는 경우 마지막 요소를 반환합니다. 이 두 알고리즘에는 사용자 지정 비교 기능을 나타내는 세 번째 매개 변수를 포함할 수 있는 오버로드도 있습니다.

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

출력:

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

관련 문장 - C++ Algorithm