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 が一致する場合に 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 中国語 Web サイトの他の関連記事を参照してください。