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

C++ STL map::find() 함수 완벽 정리 – 동작 원리, 문법과 실전 예제

이 글에서는 C++ STL의 map::find() 함수가 어떻게 동작하는지, 그 문법과 다양한 예제를 통해 자세히 알아보겠습니다.

C++ STL에서 Map이란?

Map은 연관 컨테이너(associative container)로, 키(key)와 값(value)이 한 쌍을 이루는 요소들을 특정 순서에 따라 저장할 수 있게 해줍니다. Map 컨테이너 내부에서 데이터는 항상 키를 기준으로 자동 정렬되며, 각 요소는 고유한 키를 통해서만 접근할 수 있습니다.

map::find()란 무엇인가?

map::find()<map> 헤더 파일에 포함된 함수로, 검색하고자 하는 특정 키에 해당하는 요소를 가리키는 반복자(iterator)를 반환합니다. 만약 해당 키가 맵에 존재하지 않으면 end() 반복자를 반환합니다.

문법

map_name.find(key_value k);

매개변수

이 함수는 다음 매개변수를 하나 받습니다.

k: Map 컨테이너에서 검색하려는 키 값입니다.

반환 값

키 k와 연결된 요소를 가리키는 반복자를 반환합니다. 키가 존재하지 않을 경우 end() 반복자를 반환합니다.

예제

입력

map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap.find('b');

출력

2

예제 1: find()로 특정 키 검색하기

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.insert({3, 50});
    TP_Map.insert({2, 30});
    TP_Map.insert({1, 10});
    TP_Map.insert({4, 70});
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    //특정 위치의 맵 값을 찾기
    auto var = TP_Map.find(1);
    cout<<"Found element at position "<<var->first<<" is : "<<var->second;
    auto var_1 = TP_Map.find(2);
    cout<<"\nFound element at position "<<var_1->first<<" is : "<<var_1->second;
    return 0;
}

출력

TP Map is:
MAP_KEY     MAP_ELEMENT
1           10
2           30
3           50
4           70
Found element at position 1 is : 10
Found element at position 2 is : 30

위 예제에서 TP_Map.find(1)은 키 1에 해당하는 요소를 가리키는 반복자를 반환하고, var->first로 키를, var->second로 값을 출력할 수 있습니다.

예제 2: find() 결과부터 끝까지 순회하기

find()는 반복자를 반환하므로, 이를 활용해 특정 위치부터 맵의 끝까지 요소를 순회할 수도 있습니다.

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.insert({3, 50});
    TP_Map.insert({2, 30});
    TP_Map.insert({1, 10});
    TP_Map.insert({4, 70});
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.find(2); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력

TP Map is:
MAP_KEY     MAP_ELEMENT
2           30
3           50
4           70

이처럼 find()가 반환한 반복자를 루프의 시작점으로 사용하면, 키 2부터 마지막 요소까지 차례대로 출력되는 것을 확인할 수 있습니다.

마무리

map::find()는 C++ STL에서 맵 내 특정 키를 빠르게 검색할 때 유용한 함수입니다. 맵은 내부적으로 균형 이진 탐색 트리(레드-블랙 트리)로 구현되어 있어, find()의 시간 복잡도는 O(log n)입니다. 검색 실패 시 end()를 반환한다는 점만 기억하면 안전하게 활용할 수 있습니다.