「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > std::find_if を使用して構造体のベクトル内の要素を効率的に検索する方法

std::find_if を使用して構造体のベクトル内の要素を効率的に検索する方法

2024 年 11 月 1 日に公開
ブラウズ:588

How to Efficiently Find Elements in a Vector of Structs Using std::find_if?

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

構造体のような複雑なデータ構造を扱う場合、それらの要素のベクトルを検索するのが困難になることがあります。 。このコンテキストでは、 std::find 関数は、ベクター内の特定の要素を識別するためのソリューションを提供します。

次のような構造体定義を考えてみましょう:

struct monster 
{
    DWORD id;
    int x;
    int y;
    int distance;
    int HP;
};

さて、モンスターのベクトルがあるとします。

std::vector monsters;

次の要素に基づいて要素を検索します。構造体の特定のフィールド (モンスターの ID など) を使用するには、std::find の代わりに std::find_if を使用する必要があります。 std::find_if は引数として述語関数を受け取り、検索条件を定義できます。

ブースト ライブラリを使用した例を次に示します。

it = std::find_if(bot.monsters.begin(), bot.monsters.end(), 
        boost::bind(&monster::id, _1) == currentMonster);

または、boost が利用できない場合は、次のように独自の find_id 関数オブジェクトを作成できます:

struct find_id : std::unary_function {
    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));

std::find_if と適切な述語関数を使用すると、構造体のベクトルを効率的に検索して、メンバー変数に基づいて特定の要素を見つけることができます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3