min_element()

김민수·2025년 1월 8일

C++

목록 보기
21/68

특정 범위에서 가장 작은 값을 가지는 요소를 찾는데 사용된다. algorithm 헤더에 포함된 함수다.


1. 매개변수

  1. first : 탐색 시작 지점을 나타내는 반복자
  2. last : 탐색 종료 지점을 나타내는 반복자 (탐색 범위에 포함되지 않음)
  3. comp (선택적) : 사용자 정의 비교 함수. 특정 조건에 따라 최소 요소를 찾을 수 있음


2. 반환값

  • 가장 작은 값을 가지는 요소를 가리키는 반복자
  • 범위가 비어 있으면 last 반복자를 반환


3. 사용 예시

기본 사용법

int main() {
    std::vector<int> v = {3, 1, 4, 1, 5, 9, 2};
    auto minIt = std::min_element(v.begin(), v.end());
    
    if (minIt != v.end()) {
        std::cout << "최소값: " << *minIt << "\n";
    } else {
        std::cout << "벡터가 비어 있습니다.\n";
    }

    return 0;
}

출력

최소값: 1

사용자 정의 비교 함수
comp를 통해 특정 기준에 따라 최소값을 결정할 수 있다.

bool compare(int a, int b) {
    return abs(a) < abs(b); // 절댓값 기준 비교
}

int main() {
    std::vector<int> v = {-10, -20, 15, 5};
    auto minIt = std::min_element(v.begin(), v.end(), compare);
    
    if (minIt != v.end()) {
        std::cout << "절댓값 기준 최소값: " << *minIt << "\n";
    }

    return 0;
}

출력

절댓값 기준 최소값: 5


4. 특징

  1. 시간복잡도

    • 단순 순회: O(n). 범위 내의 모든 요소를 한 번씩 비교한다.
  2. 안정성

    • 동일한 값이 여러 개 있을 경우, 처음 발견된 요소를 반환한다.
  3. 사용 범위

    • min_element()는 임의 접근 반복자뿐만 아니라 순차 반복자에서도 사용할 수 있다.


5. std::min() 과 차이점

  • std::min()
    • 두 개의 값 또는 이니셜라이저 리스트에서 최소값을 반환
    • 값 자체를 반환하며, 반복자를 반환하지 않음
  • std::min_element()
    • 특정 범위 내에서 최소값을 가리키는 반복자를 반환
int main() {
    int a = 10, b = 20;
    std::cout << "std::min: " << std::min(a, b) << "\n"; // 값 반환

    std::vector<int> v = {3, 1, 4};
    auto minIt = std::min_element(v.begin(), v.end());
    if (minIt != v.end()) {
        std::cout << "std::min_element: " << *minIt << "\n"; // 반복자가 가리키는 값 반환
    }

    return 0;
}

출력

std::min: 10
std::min_element: 1
profile
안녕하세요

0개의 댓글