Arrayのincludes_if()が便利【OpenSiv3D】

Siv3Dの動的配列Array。OpenSiv3Dになって追加された関数の1つにincludes_if()があります。

指定した条件を満たす要素が配列に含まれているかbool型で返す関数です。

この関数を使えばstd::find_if()またはstd::any_ofで書いていたものが短いコードで書けるようになります。

サンプル

# include <Siv3D.hpp>
struct Profile
{
    Profile() {};
    Profile(String n, float f) :
        name(n),
        debut(f) {}
    String name; //名前
    float debut; //初登場作品のナンバリング
};

void Main()
{
    Array<Profile> profiles{ { U"霊夢", 1.0 } ,{ U"菫子",14.5 } ,{ U"ネムノ", 16.0 } };

    auto lamda = [](Profile p) {return p.name == U"霊夢"; };

    //includes_if()----------------------------------------------------------------------------------
    bool includes_reimu1 = profiles.includes_if(lamda);

    Print << U"霊夢(includes_if()) = " << includes_reimu1;

    //std::find_if()----------------------------------------------------------------------------------
    bool includes_reimu2 = std::find_if(profiles.begin(), profiles.end(), lamda) != profiles.end();

    Print << U"霊夢(std::find_if()) = " << includes_reimu2;

    //std::any_of()----------------------------------------------------------------------------------
    bool includes_reimu3 = std::any_of(profiles.begin(), profiles.end(), lamda);

    Print << U"霊夢(std::any_of()) = " << includes_reimu3;

    while (System::Update())
    {
    }
}

実行結果

霊夢(includes_if()) = true

霊夢(std::find_if()) = true

便利な関数がどんどん増えていく

イテレータがほしいときはstd::find_if()が必要ですけど、有るか無いか知りたいだけのときはいちいちbigin()だend()だ書かなくて済むのでいいですね。

2018年3月7日追記

std::any_ofの存在を忘れてました。
よって書き足し。includes_if()のほうが便利なのは相変わらずです。