地図をベクターに変換したい。
int main()
{
map <int,int> m;
m[0]=99;
m[1]=5;
vector<int> v;
transform( m.begin(), m.end(), back_inserter( v ), ??? );
}
???の代わりにSTLから使用できる関数はどれですか。私はたくさんのグーグルをしましたが、何も知りませんでした。
どんな議論も役に立ちます。
ここに必要なものがあると思います(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 として記述できます。理解しやすく、以前のように不要な一時的なものを作成するのを防ぎます。