C++에서 STL의 std::min_element 알고리즘
-
std::min_element
알고리즘을 사용하여 C++의 범위에서 가장 작은 요소 찾기 -
std::minmax_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
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