사용자 정의 구조체의 벡터를 검색할 때 특정 요소를 격리하고 반복하는 데 어려움을 겪을 수 있습니다. 이 기사에서는 C의 표준 라이브러리 함수를 사용하여 이 문제에 대한 솔루션을 탐색합니다.
문제:
다음 구조체를 고려하세요.
<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
이러한 구조체의 벡터 만들기:
<code class="cpp">std::vector<monster> monsters;</code>
id 요소를 기반으로 벡터 내에서 특정 몬스터를 검색하려고 합니다.
해결책:
특정 필드를 기반으로 요소를 검색하려면 std::find 대신 std::find_if 함수를 사용하세요. std::find_if를 사용하면 벡터의 요소를 필터링하는 조건자 함수를 지정할 수 있습니다.
다음은 std::find_if:
1을 사용하여 이에 접근하는 두 가지 방법입니다. Boost 라이브러리 사용:
Boost 라이브러리를 사용할 수 있는 경우 다음 코드를 사용할 수 있습니다:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
2. 사용자 정의 함수 개체 만들기:
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; } };</code>
그런 다음 std::find_if에서 이 함수 개체를 사용합니다. :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>
이것은 몬스터 벡터를 반복하여 지정된 ID를 가진 몬스터를 검색합니다. 그런 다음 std::find_if에서 반환한 반복자를 사용하여 발견된 몬스터에 액세스할 수 있습니다.
위 내용은 C를 사용하여 구조체 벡터에서 특정 몬스터를 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!