이 글에서는 C++ STL의 set::find() 함수가 무엇인지 살펴보고, 함수의 구문, 동작 방식, 그리고 반환값까지 실제 예제 코드와 함께 자세히 알아보겠습니다.
C++ STL에서 set이란?
C++ STL에서 set은 고유한(unique) 요소들을 정렬된 순서로 저장하는 컨테이너입니다. set에는 중복된 요소를 저장할 수 없는데, 그 이유는 각 요소의 값 자체가 곧 해당 요소의 식별자 역할을 하기 때문입니다. 한 번 set에 삽입된 값은 이후 수정할 수 없지만, 값을 삭제하거나 새로운 값을 추가하는 것은 언제든 가능합니다. 내부적으로 set은 이진 탐색 트리(Binary Search Tree) 구조로 구현되어 있어 빠른 검색 성능을 제공합니다.
set::find()란 무엇인가?
find() 함수는 C++ STL에 내장된 함수로, <set> 헤더 파일에 정의되어 있습니다. 이 함수는 set 컨테이너에서 특정 요소나 값을 검색할 때 사용됩니다.
find()는 검색한 요소의 위치를 가리키는 반복자(iterator)를 반환합니다. 만약 찾고자 하는 요소가 set에 존재하지 않는다면, set 컨테이너의 마지막 요소 바로 다음 위치를 가리키는 반복자(end())를 반환합니다.
구문(Syntax)
Set1.find(const type_t& element);
매개변수(Parameter)
이 함수는 하나의 매개변수를 받습니다. 바로 set에서 찾고자 하는 요소(element)입니다.
반환값(Return Value)
이 함수는 찾으려는 요소의 위치를 가리키는 반복자를 반환합니다. 요소가 존재하지 않을 경우 end() 반복자가 반환됩니다.
예제 1
Input: set<int> myset = {10, 20, 40, 80, 90};
myset.find(40);
Output: element found예제 2 – find()로 요소 검색하기
#include <bits/stdc++.h>
using namespace std;
int main(){
set<int> mySet;
mySet.insert(10);
mySet.insert(20);
mySet.insert(90);
mySet.insert(80);
mySet.insert(40);
auto temp = mySet.find(40);
cout<<"Elements after 40 are: ";
for (auto i = temp; i != mySet.end(); i++)
cout << *i << " ";
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Elements after 40 are: 40 80 90
위 예제에서 find(40)은 값 40이 저장된 위치를 가리키는 반복자를 반환하며, 그 위치부터 set의 끝까지 순회하면 40 이후의 모든 요소를 출력할 수 있습니다.
예제 3 – find()와 erase() 함께 사용하기
#include <iostream>
#include <set>
int main (){
std::set<int> mySet;
std::set<int>::iterator i;
for(int i=1; i<=4; i++)
mySet.insert(i*2);
i = mySet.find(6);
mySet.erase(i);
mySet.erase(mySet.find(4));
std::cout<<"elements are : ";
for (i = mySet.begin(); i != mySet.end(); ++i)
std::cout << ' ' << *i;
std::cout << '
';
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Elements are : 2 8
이 예제에서는 find()가 반환한 반복자를 erase()에 전달하여 특정 요소(6과 4)를 set에서 삭제했습니다. 이처럼 find()는 단순 검색뿐만 아니라 특정 요소의 삭제 작업에도 유용하게 활용됩니다.