> 백엔드 개발 > C++ > 내부 속성을 기반으로 구조체의 벡터를 검색하는 방법: std::find_if 가이드

내부 속성을 기반으로 구조체의 벡터를 검색하는 방법: std::find_if 가이드

Mary-Kate Olsen
풀어 주다: 2024-10-29 22:14:02
원래의
973명이 탐색했습니다.

How to Search Vectors of Structs Based on Internal Properties: A Guide to std::find_if

std::find를 사용하여 구조체 벡터 검색

구조체와 같은 복잡한 데이터 구조의 벡터로 작업할 때 내장된 std::find 내부 속성을 기반으로 특정 요소를 검색해야 하는 경우 함수가 충분하지 않습니다. 간단한 예를 사용하여 이 제한을 극복하는 방법을 살펴보겠습니다.

다음 구조체를 고려하세요.

<code class="cpp">struct monster { 
    DWORD id;
    int x;
    int y;
    int distance;
    int HP;
};</code>
로그인 후 복사

이제 이러한 몬스터은 bot.monsters로 명명되었습니다. 특정 ID를 가진 몬스터를 검색하려면 std::find를 사용할 수 있지만 해당 ID는 monster 구조체의 멤버이므로 함수에 어떻게 해야 하는지 알려줘야 합니다. 액세스하세요.

std::find_if 함수는 사용자 정의 기준을 지정하는 방법을 제공합니다. 각 몬스터에서 ID를 추출하여 대상 ID와 비교하는 람다 함수를 정의할 수 있습니다.

<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
        boost::bind(&monster::id, _1) == currentMonster);</code>
로그인 후 복사
이 람다 함수는 벡터를 효과적으로 필터링하여 각 몬스터를 반복하고 ID가 대상 ID와 일치하면 true를 반환합니다. 지정된

currentMonster ID.

Boost 라이브러리에 액세스할 수 없는 경우 고유한 함수 객체를 작성할 수 있습니다.

<code class="cpp">struct find_id : std::unary_function<monster, bool> {
    DWORD id;
    find_id(DWORD id):id(id) { }
    bool operator()(monster const& m) const {
        return m.id == id;
    }
};

it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
         find_id(currentMonster));</code>
로그인 후 복사
이 사용자 정의 함수 객체는 다음을 허용합니다. Boost가 필요 없이 동일한 검색을 수행할 수 있습니다.

std::find_if와 사용자 정의 기준을 사용하면 복잡한 데이터 구조의 벡터를 효과적으로 검색할 수 있습니다. 특정 멤버 값을 제공하여 데이터 조작에 더 큰 유연성을 제공합니다.

위 내용은 내부 속성을 기반으로 구조체의 벡터를 검색하는 방법: std::find_if 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿