C を使用して構造体のベクトル内の特定のモンスターを効率的に見つけるにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-31 05:37:02
オリジナル
533 人が閲覧しました

How to Efficiently Find Specific Monsters in a Vector of Structs using C  ?

ベクター内のモンスターの検索

カスタム構造体のベクターを検索する場合、特定の要素を分離して反復する際に問題が発生する場合があります。この記事では、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!