我在从指针向量创建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&lt; _Ty1,_Ty2&gt; `anonymous-namespace':::: operator()(std :: map&lt; _Kty,_Ty&gt;,std :: tr1 :: shared_ptr&amp;)const':无法从'std :: map&lt; _Kty,_Ty&gt转换参数1 ; 'to'std :: map&lt; _Kty,_Ty&gt;'
我不太确定要传递给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;
});
答案 0 :(得分:2)
错误消息是您在两种std::map
之间存在类型不匹配。看起来错误在代码中调用 lambda,这显然传递了acc
参数的错误内容。好消息是发布的lambda实际上从未使用acc
参数。