C++ STL의 set 컨테이너에서 제공하는 find() 함수는 set 컨테이너 내에서 특정 요소를 검색하고, 해당 요소를 가리키는 반복자(iterator)를 반환합니다. 만약 찾고자 하는 요소가 set에 존재하지 않는다면, 마지막 요소 바로 다음 위치를 가리키는 end() 반복자를 반환합니다.
동작 알고리즘
find() 함수를 활용하는 기본적인 알고리즘 흐름은 다음과 같습니다.
시작
set 컨테이너의 요소를 출력하는 printS() 함수 정의
빈 set 컨테이너 s를 초기화하고, s에 여러 요소 삽입
printS() 함수를 호출하여 set 컨테이너의 요소 출력
set find() 함수를 호출하여 s에서 특정 요소 검색
만약 해당 요소가 set에 존재하면
"요소가 set 안에 있습니다" 출력
그렇지 않으면
"요소가 set 안에 없습니다" 출력
종료.예제 코드
아래 예제는 set 컨테이너에 여러 정수를 삽입한 뒤, find() 함수로 값 6을 검색하고, 해당 위치부터 끝까지의 모든 요소를 출력하는 프로그램입니다.
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
set<int> s;
set<int>::iterator it;
s.insert(7);
s.insert(6);
s.insert(1);
s.insert(4);
s.insert(2);
s.insert(9);
s.insert(10);
auto pos = s.find(6);
cout << "6 이후의 set 요소들: ";
for ( it = pos; it != s.end(); it++)
cout << *it << " ";
return 0;
}실행 결과
6 이후의 set 요소들: 6 7 9 10
코드 설명
위 예제에서 s.find(6)은 set 내에서 값 6을 검색합니다. set은 내부적으로 균형 이진 탐색 트리(레드-블랙 트리)로 구현되어 있어 요소들이 항상 오름차순으로 정렬되어 저장됩니다. 따라서 find()가 반환한 반복자 위치부터 end()까지 순회하면 6을 포함하여 그보다 큰 값들인 6, 7, 9, 10이 순서대로 출력됩니다.
또한 find() 함수의 시간 복잡도는 O(log n)으로, set의 크기에 로그 비례하는 매우 효율적인 검색 성능을 제공합니다. 요소의 존재 여부만 확인할 때는 반환된 반복자가 s.end()와 같은지 비교하면 됩니다.