반응형

아래 게시물에서는 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<intint> 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(50), comp) - arr.begin();
    printf("lower_bound :: %d\n", lo_it);

    // x가 5초과인 값이 있는 첫 index를 찾는 과정이다. 
    auto up_it = upper_bound(arr.begin(), arr.end(), pii(50), 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


반응형