두 함수 모두 C++에서 이진 탐색을 활용하여 원소의 위치를 찾아낼때 활용한다.
공통적으로 아래 두 가지 특징을 지니고 있다.
1. 배열, 혹은 벡터가 오름차순으로 정렬되어있어야 함
2. algorithm 라이브러리를 사용함
lower_bound
- 목적 : 찾으려는 key 값이 배열, 혹은 벡터의 몇 번째에 존재하는지 반환
- Tip 1 : key값이 존재하지 않을 경우, 찾으려는 key값보다 바로 다음으로 큰 값의 위치를 반환
(ex : 아래 예시에서 -1의 lower_bound 결과를 찾을 경우, 0을 반환) - Tip 2 : key값과 key값보다 큰 값 모두 존재하지 않을 경우, 배열의 size를 반환함
(ex : 아래 예시에서 6을 찾을 경우 5를 반환)
사용법
// 사용법
lower_bound(배열, 배열+배열의 사이즈, 찾고자 하는 값) - 배열
lower_bound(벡터.begin(), 벡터.end(), 찾고자 하는 값) - 벡터.begin()
사용 예시
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int arr[] = {0,1,4,3,2};
sort(arr,arr+5); // {0,1,2,3,4}
cout << "Lower Bound (2) : " << lower_bound(arr,arr+5,2)-arr << "\n";
return 0;
}
사용 결과
Lower Bound (2) : 2
upper_bound
- 목적 : 찾으려는 key 값보다 바로 다음으로 큰 값이 배열 혹은 벡터의 몇 번째에 존재하는지 반환
- Tip 1 : key값이 존재하지 않을 경우, 찾으려는 key값보다 바로 다음으로 큰 값의 위치를 반환
(ex : 아래 예시에서 -1의 upper_bound 결과를 찾을 경우, 0을 반환) - Tip 2 : key값과 key값보다 큰 값 모두 존재하지 않을 경우, 배열의 size를 반환함
(ex : 아래 예시에서 5의 upper_bound 결과를 찾을 경우, 5를 반환)
사용법
// 사용법
upper_bound(배열, 배열+배열의 사이즈, 찾고자 하는 값) - 배열
upper_bound(벡터.begin(), 벡터.end(), 찾고자 하는 값) - 벡터.begin()
사용 예시
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int arr[] = {0,1,4,3,2};
sort(arr,arr+5); // {0,1,2,3,4}
cout << "Upper Bound (2) : " << upper_bound(arr,arr+5,2)-arr << "\n";
return 0;
}
사용 결과
Upper Bound (2) : 3 // 2보다 큰 값인 3은 3번째 인덱스에 존재한다.
'👩🏻💻 Programming > C++' 카테고리의 다른 글
C++로 알고리즘을 풀때 주의사항 (0) | 2021.02.16 |
---|---|
auto 변수와 자료형 타입 (0) | 2020.11.09 |
exit(0)과 exit(1)의 차이 (0) | 2020.09.18 |
memset과 fill메모리 초기화 함수 (0) | 2020.09.16 |
vector<int> v(n)과 vector<int> v[n]의 차이 (0) | 2020.09.08 |