minmax_element

minmax_element (범위에서 최소·최대 원소 위치)

범위에서 최소값과 최대값의 위치를 std::pair<반복자, 반복자>로 한 번에 찾는 알고리즘이에요. <algorithm> 헤더에 있어요.

출처: cppreference

본문

minmax_element는 범위 [first, last)에서 최소 원소와 최대 원소를 가리키는 반복자 쌍을 반환해요.

template< class ForwardIt >
std::pair<ForwardIt, ForwardIt>
    minmax_element( ForwardIt first, ForwardIt last );   // (1)

비교기 버전도 있어요.

template< class ForwardIt, class Compare >
std::pair<ForwardIt, ForwardIt>
    minmax_element( ForwardIt first, ForwardIt last, Compare comp );   // (2)
  • 반환 값: {min_iter, max_iter} 쌍. 범위가 비어 있으면 {last, last}.
  • 복잡도: 최대 3·⌊(N−1)/2⌋번의 비교(N = last-first).

min_elementmax_element를 각각 부르는 것보다 비교 횟수를 줄일 수 있어요.

std::vector<int> v{3, 1, 4, 1, 5};
auto [lo, hi] = std::minmax_element(v.begin(), v.end());
int mn = *lo, mx = *hi;   // mn=1, mx=5

최소와 최대 위치가 모두 필요할 때 효율적으로 얻는 함수예요.

더 알아보기 (Learn more)

cppreference