ホームページ >バックエンド開発 >C++ >内部プロパティに基づいて構造体のベクトルを検索する方法: std::find_if のガイド

内部プロパティに基づいて構造体のベクトルを検索する方法: std::find_if のガイド

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 22:14:02977ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。