Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL set 컨테이너의 equal_range() 함수 완벽 가이드

이 글에서는 C++ STL의 set::equal_range() 함수에 대해 자세히 알아보겠습니다. 함수의 구문, 동작 방식, 그리고 반환값까지 하나씩 살펴보겠습니다.

C++ STL에서 set이란?

C++ STL의 set은 고유한(unique) 요소들만을 정렬된 순서로 저장하는 연관 컨테이너입니다. set에 저장되는 값은 그 자체로 요소를 식별하는 키 역할을 하기 때문에 반드시 중복될 수 없습니다. 한 번 set에 삽입된 값은 수정할 수 없지만, 값을 삭제하거나 새로 추가하는 것은 언제든 가능합니다. 내부적으로 set은 이진 탐색 트리(binary search tree)로 구현되어 있어 검색, 삽입, 삭제가 모두 로그 시간 복잡도 O(log n)으로 처리됩니다.

set::equal_range()란?

equal_range()는 C++ STL의 <set> 헤더 파일에 내장된 멤버 함수입니다. 이 함수는 인자로 전달된 값과 일치하는 요소의 범위(range)를 pair 형태로 반환합니다.

set은 모든 값을 유일하게 가지므로, 찾은 범위에는 해당 값 하나만 포함됩니다. 만약 전달한 값이 컨테이너에 존재하지 않으면, 두 반복자(first와 second)가 모두 그 값이 들어갈 첫 번째 위치를 가리키며 빈 범위를 반환합니다.

구문

Set1.equal_range(const type_t& value);

매개변수

이 함수는 매개변수를 하나만 받습니다. 즉, 컨테이너에서 찾고자 하는 요소의 값입니다.

반환값

equal_range()는 pair 객체를 반환합니다. 이 pair의 first는 하한(lower bound)을 가리키는 반복자, second는 상한(upper bound)을 가리키는 반복자입니다. 즉, 찾으려는 요소를 포함하는 반복자 범위가 반환됩니다.

  • first: 지정한 값보다 작지 않은 첫 번째 요소를 가리킵니다 (lower_bound와 동일).
  • second: 지정한 값보다 큰 첫 번째 요소를 가리킵니다 (upper_bound와 동일).

예제

Input: set<int> myset = {10, 20, 30, 40};
Output: lower bound of 30 is 30

코드 예제

#include <bits/stdc++.h>
using namespace std;
int main(){
    set<int> mySet;
    mySet.insert(10);
    mySet.insert(20);
    mySet.insert(30);
    mySet.insert(40);
    mySet.insert(50);
    cout<<"Elements before applying range() Function : ";
    for (auto i = mySet.begin(); i != mySet.end(); i++)
        cout << *i << " ";
    auto i = mySet.equal_range(30);
    cout<<"\nlower bound of 30 is "<< *i.first;
    cout<<"\nupper bound of 30 is "<< *i.second;
    i = mySet.equal_range(40);
    cout<<"\nlower bound of 40 is " << *i.first;
    cout<<"\nupper bound of 40 is "<< *i.second;
    i = mySet.equal_range(10);
    cout<<"\nlower bound of 10 is "<< *i.first;
    cout<<"\nupper bound of 10 is "<< *i.second;
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Elements before applying range() Function : 10 20 30 40 50
lower bound of 30 is 30
upper bound of 30 is 40
lower bound of 40 is 40
upper bound of 40 is 50
lower bound of 10 is 10
upper bound of 10 is 20

정리

set::equal_range()는 특정 값의 존재 여부 확인과 함께 lower_bound와 upper_bound를 한 번의 호출로 얻을 수 있는 편리한 함수입니다. set처럼 중복이 허용되지 않는 컨테이너에서는 반환되는 범위에 항상 최대 하나의 요소만 포함되므로, 값 검색 및 위치 파악에 유용하게 활용할 수 있습니다.