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
반응형