Programming/C++

Vector 최대값, 최소값, 인덱스 구하기

moxie2ks 2025. 2. 4. 18:01
728x90
반응형

개요

C++의 <algorithm> 헤더에는 다양한 유용한 알고리즘이 포함되어 있으며, 그중 std::max_element는 컨테이너에서 가장 큰 값을 가진 원소를 찾는 기능을 제공한다. 이번 포스팅에서는 std::max_element의 사용법을 예제와 함께 자세히 살펴보자.

설명

std::max_element는 주어진 범위에서 가장 큰 값을 가진 원소의 반복자(iterator)를 반환하는 함수이다.

이 함수는 선형 탐색(O(n))을 수행하며, 기본적으로 operator<를 사용하여 값을 비교한다.

std::max_element는 <algorithm> 헤더에 정의되어 있으며, 다음과 같은 두 가지 형태로 사용된다.

std::min_element는 주어진 범위에서 가장 작은 값을 가진 원소의 반복자(iterator)를 반환하는 함수이다. max_element와 사용법이 동일하므로 본 글에서는 max_element만 설명한다.

1.  기본 사용법

template <class ForwardIterator> ForwardIterator max_element(ForwardIterator first, ForwardIterator last);
  • [first, last) 범위 내에서 가장 큰 값을 가진 원소의 반복자(iterator)를 반환한다.
  • 기본적으로 operator<을 사용하여 원소를 비교한다.

2.  사용자 정의 비교 함수 사용

template <class ForwardIterator, class Compare> ForwardIterator max_element(ForwardIterator first, ForwardIterator last, Compare comp);
  • comp 함수를 제공하면, 사용자 정의 기준으로 가장 큰 값을 찾을 수 있다.
  • comp(x, y)가 true를 반환하면 y가 x보다 크다고 간주된다.

예제 코드

예제 1: 기본적인 사용법

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> numbers = {3, 1, 7, 9, 2, 5};

    auto max_it = std::max_element(numbers.begin(), numbers.end());

    if (max_it != numbers.end()) {
        std::cout << "가장 큰 원소: " << *max_it << std::endl;
    }

    max_it = std::min_element(numbers.begin(), numbers.end());

    if (max_it != numbers.end()) {
        std::cout << "가장 작은 원소: " << *max_it << std::endl;
    }

    return 0;
}

실행결과

가장 큰 원소: 9

예제 2: 사용자 정의 비교 함수 사용법

#include <iostream>
#include <algorithm>
#include <vector>

bool abs_compare(int a, int b) {
    return a > b;
}

int main() {
    std::vector<int> numbers = {-10, -3, 5, -20, 7};

    auto max_it = std::max_element(numbers.begin(), numbers.end(), abs_compare);

    if (max_it != numbers.end()) {
        std::cout << "가장 작은 원소: " << *max_it << std::endl;
    }

    return 0;
}

실행 결과

가장 작은 원소: -20

예제 3: 가장 큰 원소의 인덱스 구하기

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> v = {3, 1, 7, 9, 2, 5};

    // std::max_element를 사용하여 가장 큰 원소의 위치를 찾음
    int max_index = std::max_element(v.begin(), v.end()) - v.begin();

    std::cout << "가장 큰 원소의 인덱스: " << max_index << std::endl;

    return 0;
}

실행 결과

가장 큰 원소의 인덱스: 3

결론

  • std::max_element는 주어진 범위에서 가장 큰 원소의 반복자를 반환하는 함수로, 매우 유용한 알고리즘이다.
  • 기본적으로 operator<을 사용하여 값을 비교하지만, 사용자 정의 비교 함수를 제공하면 원하는 기준으로 최댓값을 찾을 수 있다.
  • 시간 복잡도는 O(n) 이므로, 대용량 데이터에서 사용할 때 성능을 고려해야 한다.

참고 문헌

 

728x90
반응형