構造体のような複雑なデータ構造を扱う場合、それらの要素のベクトルを検索するのは困難になる場合があります。このコンテキストでは、 std::find 関数は、ベクター内の特定の要素を識別するためのソリューションを提供します。
次のような構造体定義を考えてみましょう。
<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 は引数として述語関数を取り、これにより検索条件を定義できます。
これは、boost ライブラリを使用した例です。
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
または、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>
std::find_if と適切な述語関数を使用すると、構造体のベクトルを効率的に検索して、構造体の構造に基づいて特定の要素を見つけることができます。メンバー変数。
以上がstd::find_if を使用して構造体のベクトル内の要素を効率的に検索する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。