1

std::map<int, int>从一个名为files. 每个指针指向一个具有三个成员变量的对象,其中一个是size类型int。地图的键是 ,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::pair<_Ty1,_Ty2> `anonymous-namespace'::::operator ()(std::map<_Kty,_Ty>,std::tr1::shared_ptr &) const':无法转换参数 1 从 'std::map<_Kty,_Ty> ' 到 'std::map<_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;
    });
4

1 回答 1

2

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

于 2012-03-24T15:25:16.947 回答