C++ std::transform ベクトルの pairs->first を新しいベクトルに変換する 質問する

C++ std::transform ベクトルの pairs->first を新しいベクトルに変換する 質問する

初心者っぽい質問ですみません。ベクトルとペアのベクトルがあります

typedef std::vector <int> TItems;
typedef std::vector < std::pair <int, int> > TPairs;

ペアの最初の項目すべてを1ステップで別のベクトルに変換する方法はありますか

int main ()
{
TItems items;
TPairs pairs;

pairs.push_back (std::make_pair(1,3));
pairs.push_back (std::make_pair(5,7));

std::transform( items.begin(), items.end(), items.begin(), comp ( &pairs ) );

return 0;
}

関数を設計するにはどうすればいいですか?

class comp
{
private:
     TPairs *pairs;

public:
    comp ( TPairs  *pairs_ ) : pairs ( pairs_) { }

    unsigned int operator () ( const unsigned int index ) const
    {
        return  (*pairs)[index].second != pairs->end();  //Bad idea
    }
};

ラムダ式やループを使わない、もっとユーザーフレンドリーな方法があるかもしれません。ご協力ありがとうございます。

ベストアンサー1

まず、back_inserter3番目の議論としてtransform変換された値がベクトルの後ろに押し出されるようになります。

次に、int のペアを受け取り、最初の int を返す関数が必要です。これは次のようになります。

int firstElement( const std::pair<int, int> &p ) {
    return p.first;
}

さて、まとめると次のようになります。

TPairs pairs;
pairs.push_back( std::make_pair( 1, 3 ) );
pairs.push_back( std::make_pair( 5, 7 ) );

TItems items;
std::transform( pairs.begin(), pairs.end(), std::back_inserter( items ),
                firstElement );

このコードの後に​​はitems1 と 5 が含まれます。

おすすめ記事