std::map<int, int>
と呼ばれるポインタのベクトルからを作成する際に問題がありますfiles
。各ポインターは、3 つのメンバー変数を持つオブジェクトを指し、そのうちの 1 つはsize
型int
です。マップのキーは でsize
、値は同じ を持つオブジェクトの数ですsize
。
2 番目のもので時間を無駄にしないでください。これは私のプログラムの次のステップであり、すでに理解していると思います。std::accumulate
値を返すため、使用しているマップの初期化に使用します。std::tr1::shared_ptr
述語関数のポインターとラムダ式を使用しています。コンパイルに問題があります。
コード スニペットは次のとおりです。
map<int,int>* sizes = new map<int,int>();
sizes = accumulate(files.begin(), files.end(),sizes,
[&sizes](map<int,int> acc, shared_ptr<CFileType>& obj)
{
return sizes->insert(pair<int,int>(obj->getSize(),0));
});
エラーは次のとおりです。
エラー C2664: 'std::pair<_Ty1,_Ty2> `anonymous-namespace'::::operator ()(std::map<_Kty,_Ty>,std::tr1::shared_ptr &) const': 変換できません'std::map<_Kty,_Ty>' から 'std::map<_Kty,_Ty>' へのパラメーター 1
ラムダ関数に何を渡すかよくわかりません。で試してみましpair<int, int>
たが、うまくいきませんでした。また、このマップは別の関数に返されるため、ポインターである必要があります。
あなたからの助けをいただければ幸いです。ありがとう!
アップデート:
問題は解決しました。解決策は次のとおりです。
map<int,int>* sizes = accumulate(files.begin(), files.end(), new map<int,int>(),
[](map<int,int>* acc, shared_ptr<CFileType>& obj)->map<int,int>*
{
acc->insert(pair<int,int>(obj->getSize(),0));
return acc;
});