C++使用 std::accumulate 生成 map<int,int>

C++ using std::accumulate to generate a map<int,int>

本文关键字:int lt gt map 使用 std accumulate 生成 C++      更新时间:2023-10-16

我在从一个称为files的指针向量创建std::map<int, int>时遇到问题。每个指针指向一个具有三个成员变量的对象,其中一个是int类型的size。映射的键将是size,值将是具有相同size的对象的数量。

不要在第二个问题上浪费时间!这是我计划的下一步,我想我已经想好了。对于映射的初始化,我使用std::accumulate,因为它返回一个值。我使用std::tr1::shared_ptr作为指针,使用lambda表达式作为谓词函数。我在汇编方面有问题。

以下是代码片段:

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::对&lt_Ty1,_Ty2>"匿名命名空间":::运算符()(std::map<_Kty,_Ty>,std::tr1::shared_ptr&)const":无法从"std::map&lt_Kty,_Ty>'to'std::map&lt_Kty,_Ty>'

我不太确定要传递给lambda函数的内容。我试过用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;
    });

错误消息是两种类型的std::map s之间的类型不匹配。看起来错误出现在调用lambda的代码中,该代码显然为acc参数传递了错误的东西。好消息是,lambda在发布时从未实际使用过acc参数。