[c++] 선형탐색 find(), 이진탐색 lower_bound(), upper_bound()

강신현·2022년 2월 1일
0

find()

선형탐색
비교 하는 범위의 첫 번째 요소에 대한 반복자를 반환합니다 . 그러한 요소가 없으면 last 를 반환

반환받은 반복자를 시작 반환자인 begin()을 빼줌으로서 위치(인덱스)를 구할 수 있다.

 int num = 4;
    auto it = find(v.begin(), v.end(), num);
    if (it == v.end()) {
        cout << num << "은 찾을 수 없습니다.\n";
    }
    else {
        cout << num << "는 존재하며 인덱스는 " << it - v.begin() << " 입니다.\n";
    }

lower_bound()

이진탐색

비교하는 수보다 작지 않은(크거나 같은) 첫 번째 요소를 가리키는 반복자를 반환

⭐️ 탐색을 진행할 배열 혹은 벡터는 오름차순 정렬되어 있어야 함

find와 마찬가지로 반환받은 반복자를 시작 반환자인 begin()을 빼줌으로서 위치(인덱스)를 구할 수 있다.

for (int i = 0; i < N; i++)
    {
        auto index = lower_bound(sort_location.begin(), sort_location.end(), location[i]);
        cout << index - sort_location.begin() << ' ';
    }

예제 (s2) 18870 좌표 압축

upper_bound()

비교하는 수보다 큰 첫 번째 요소를 가리키는 반복자를 반환

⭐️ 탐색을 진행할 배열 혹은 벡터는 오름차순 정렬되어 있어야 함

find와 마찬가지로 반환받은 반복자를 시작 반환자인 begin()을 빼줌으로서 위치(인덱스)를 구할 수 있다.

References

http://www.cplusplus.com/reference/algorithm/find/

https://notepad96.tistory.com/entry/C-Vector-%EA%B0%92-%ED%83%90%EC%83%89-find-%EC%A1%B4%EC%9E%AC-%EC%9C%A0%EB%AC%B4-%ED%99%95%EC%9D%B8

https://chanhuiseok.github.io/posts/algo-55/

profile
땅콩의 모험 (server)

0개의 댓글