我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;
});