スポンサーリンク

構造体のvectorから特定の要素を一列取り出す

構造体の配列から特定の要素だけをまとめた配列を作成する。

#include <vector>
#include <string>

struct test {
    int a;
    float b;
    std::string c;
};

template <typename StructT, typename MemberT>
std::vector<MemberT> column(const std::vector<StructT>& src, MemberT StructT::* member)
{
    std::vector<MemberT> result;
    result.reserve(src.size());
    for (const auto& v : src) {
        result.push_back(v.*member);
    }
    return result;
}

int main()
{
    std::vector<test> vec = {
        {1, 1.1f, "one"},
        {2, 2.2f, "two"},
        {3, 3.3f, "three"}
    };
    std::vector<float> b_values = column(vec, &test::b);

    for (float b : b_values) {
        printf("%f\n", b);
	}


    return 0;
}
1.100000
2.200000
3.300000

メンバへのポインタを初めて使った。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: