C++ 메모장

std::find

lgbl 2025. 2. 20. 10:36
  • 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