- find
std::find는 주어진 범위 내에서 특정 값을 찾을 때 사용한다.
find(first, last, value);
first : 탐색을 시작할 반복자(iterator)
last : 탐색을 끝낼 반복자(iterator) (이 위치는 포함되지 않음)
value : 찾을 값
- 찾으면 해당 요소의 반족자를 반환, 찾지 못하면 last를 반환한다.
예를 들어
#include <iostream>
#include <vector>
#include <algorithm> // std::find 사용
int main()
{
std::vector<int> numbers = {10, 20, 30, 40, 50};
// 30 찾기
auto it = std::find(numbers.begin(), numbers.end(), 30);
if (it != numbers.end())
{
std::cout << "찾은 값: " << *it << " (index: " << std::distance(numbers.begin(), it);
}
else
{
std::cout << "값을 찾을 수 없습니다.";
}
return 0;
}
std::find(numbers.begin(), numbers.end(), 30) 을 사용하여 30의 값을 찾아 해당 요소의 반복자를 반환한다.
std::distance(numbers.begin(), it)을 사용하여 30의 위치를 인덱스 값으로 반환한다.
- find_if
find_if는 특정 조건을 만족하는 첫 번째 요소를 찾을 때 사용한다.
예를 들어
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> numbers = {1, 3, 5, 8, 9, 11};
// 첫 번째 짝수를 찾기
auto it = std::find_if(numbers.begin(), numbers.end(), [](int num) { return num % 2 == 0; });
if (it != numbers.end())
{
std::cout << "첫 번째 짝수: " << *it; // 8 출력
}
else
{
std::cout << "짝수를 찾을 수 없습니다.";
}
return 0;
}
[](int num){return num % 2 == 0} 람다함수로 짝수인지 검사 하고 짝수를 찾으면 해당 요소의 반복자를 변환한다.
- find_if_not
find_if_not은 find_if와 반대로 조건을 만족하지 않는 첫 번째 요소를 찾는다.
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> numbers = {2, 4, 6, 7, 8, 10};
auto it = std::find_if_not(numbers.begin(), numbers.end(), [](int num) { return num % 2 == 0; });
if (it != numbers.end())
{
std::cout << "첫 번째 홀수: " << *it;
}
else
{
std::cout << "홀수를 찾을 수 없습니다.";
}
return 0;
}
find는 std::map과 같은 연관 컨테이너에서도 사용할 수 있으면 이 때는 .find()를 사용해야 한다.
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> data =
{
{1, "Apple"},
{2, "Banana"},
{3, "Cherry"}
};
auto it = data.find(2);
if (it != data.end())
{
std::cout << "키 2에 해당하는 값: " << it->second;
}
else
{
std::cout << "키를 찾을 수 없습니다.";
}
return 0;
}
'C++ 메모장' 카테고리의 다른 글
컨테이너 멤버 함수 (0) | 2025.02.24 |
---|---|
map, unordered_map (0) | 2025.02.21 |
npos (0) | 2025.02.19 |
INT_MAX (0) | 2025.02.17 |
람다 표현식 (0) | 2025.02.12 |