반응형
아래 게시물에서는 lower_bound, upper_bound에 대해 알아봤는데
이번에는 pair로 이루어 진 vector에 대해 lower_bound, upper_bound를 어떻게 해야하는지 간단히 알아보려 한다.
우선 형식은 모두 같으나, 3번째 인자에 찾고자하는 값을 보내면 되고, 4번째 인자에 비교 함수를 보내는 차이가 있다.
그 외에는 모든것이 이전 블로그 내용과 동일하니 lower_bound, upper_bound에 대한 개념은 이전 게시물을 참조하면 될 듯하다.
소스 코드 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; typedef pair<int, int> pii; bool comp(const pii &a, const pii &b) { return a.first < b.first; } int main() { vector<pii> arr; int n = 10; for (int i = 0; i < n; i++) { int x, y; scanf("%d %d", &x, &y); arr.push_back(pii(x, y)); /* arr.push_back(make_pair(a,b)); 이때 C++ 11 이상 부터는 arr.push_back({a,b});로도 쓸 수 있다. */ } // lower_bound, upper_bound를 쓰기 위해 sort를 해준다. sort(arr.begin(), arr.end()); for (int i = 0; i < n; i++) cout << "i :: " << i << " x :: " << arr[i].first << " y :: " << arr[i].second << endl; // x가 5이상인 값이 있는 첫 index를 찾는 과정이다. auto lo_it = lower_bound(arr.begin(), arr.end(), pii(5, 0), comp) - arr.begin(); printf("lower_bound :: %d\n", lo_it); // x가 5초과인 값이 있는 첫 index를 찾는 과정이다. auto up_it = upper_bound(arr.begin(), arr.end(), pii(5, 0), comp) - arr.begin(); printf("upper_bound :: %d\n", up_it); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘' 카테고리의 다른 글
부분 문자열 팰린드롬 판별 알고리즘 (2) | 2017.09.14 |
---|---|
파라매트릭 서치(Parametric Search) (4) | 2017.09.14 |
lower_bound, upper_bound 이용 방법 (0) | 2017.06.29 |
구간 합(Prefix Sum) 알고리즘 (2) | 2017.05.01 |
최적화된 에라토스테네스의 체(Eratosthenes' sieve) (0) | 2017.04.21 |