ホームページ >バックエンド開発 >C++ >特定のメンバー変数を使用して構造体のベクトル内の要素を効率的に検索するにはどうすればよいですか?

特定のメンバー変数を使用して構造体のベクトル内の要素を効率的に検索するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 08:29:30651ブラウズ

How to Efficiently Find Elements in a Vector of Structs Using Specific Member Variables?

std::find を使用した構造体のベクトル内の要素の検索

ベクトル内の特定の要素の検索は、特に次のものを扱う場合に困難になることがあります。カスタム構造体。この質問では、特定のメンバー変数をターゲットにして、構造体のベクトル内の要素を見つけるための効率的なアプローチを検討します。

さまざまな属性を持つ提供された構造体モンスターを考えてみましょう。目的は、ベクター モンスター内で特定の ID 値を持つモンスターを検索することです。標準の std::find 関数だけでは、個々のメンバー変数ではなく構造体全体を比較するため、このタスクには不十分です。

この制限を克服するための 1 つの解決策は、std::find_if 関数を使用することです。 std::find_if は 3 番目のパラメータとして述語を受け取り、カスタムの比較基準を使用できます。この場合、述語はベクター内の各モンスターの id メンバー変数をチェックします。

次のコード スニペットは、Boost ライブラリ関数で std::find_if を使用する方法を示しています。

<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>

これらのソリューションはベクトルを効果的に走査し、各モンスターの ID メンバー変数をチェックします。ターゲット ID を返し、一致する要素が見つかった場合はそれを指すイテレータを返します。

以上が特定のメンバー変数を使用して構造体のベクトル内の要素を効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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