1

地図をベクターに変換したい。

int main()
{
    map <int,int> m;
    m[0]=99;
    m[1]=5;

    vector<int> v;
    transform( m.begin(), m.end(), back_inserter( v ), ??? );
}

???の代わりにSTLから使用できる関数はどれですか。私はたくさんのグーグルをしましたが、何も知りませんでした。

どんな議論も役に立ちます。

4

3 に答える 3

0

ここに必要なものがあると思います(C ++ 11の場合):

auto transformer = [] (const pair<const int, bool>& value) {
  return value.second;
};

transform( m.begin(), m.end(), back_inserter( v ), transformer);

独自のファンクター クラスを作成する場合は、C++11 ラムダを回避できますが、operator() の引数は同じにする必要があります。

アップデート。私の最初の答えは間違っていました。この間違いは typedef の重要性を示しています:

typedef map<int, bool> MyMapT;

単純なマップ定義の代わりに、型を MyMapT::value_type として記述できます。理解しやすく、以前のように不要な一時的なものを作成するのを防ぎます。

于 2013-10-25T11:25:40.177 に答える