カスタム構造体のベクターを検索する場合、特定の要素を分離して反復する際に問題が発生する場合があります。この記事では、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_if 関数を使用します。 std::find の。 std::find_if を使用すると、ベクトルの要素をフィルター処理する述語関数を指定できます。
std::find_if:
1 を使用してこれにアプローチする 2 つの方法を次に示します。 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 中国語 Web サイトの他の関連記事を参照してください。