1

std::map<int, int>と呼ばれるポインタのベクトルからを作成する際に問題がありますfiles。各ポインターは、3 つのメンバー変数を持つオブジェクトを指し、そのうちの 1 つはsizeintです。マップのキーは で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;
    });
4

1 に答える 1

2

エラーメッセージは、2種類のの間にタイプの不一致があることですstd::map。エラーはラムダを呼び出すコードにあるようですが、これは明らかにaccパラメータに間違ったものを渡します。幸いなことに、投稿されたラムダは実際にはaccパラメーターを使用しません。

于 2012-03-24T15:25:16.947 に答える