【发布时间】:2012-03-24 11:55:50
【问题描述】:
我在从称为files 的指针向量创建std::map<int, int> 时遇到问题。每个指针指向一个具有三个成员变量的对象,其中一个是size,类型为int。地图的键是size,值是具有相同size 的对象的数量。
不要在第二个上浪费时间!这是我计划的下一步,我想我已经想通了。对于地图的初始化,我使用std::accumulate,因为它返回一个值。我使用 std::tr1::shared_ptr 作为指针,使用 lambda 表达式作为谓词函数。我在编译时遇到问题。
这里是sn-p的代码:
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> `anonymous-namespace'::::operator ()(std::map<_kty>,std::tr1::shared_ptr &) const' : 无法将参数 1 从 'std::map<_kty> ' 转换为 'std::map<_kty>'
我不太确定将什么传递给 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;
});
【问题讨论】:
-
你为什么要更新你的地图?这不是 Java...
标签: c++ dictionary vector lambda accumulate