我正在尝试在代码中使用for_each循环,但是我收到以下错误:
cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &'
这是令人讨厌的代码:
typedef stdext::hash_map<
std::string, std::list<DefaultTestContext>
> CompleteTestList;
static void RunMappedTests(pair<string, list<DefaultTestContext>>& tests)
{
RunAllTestsInList(tests.second);
}
void RunTestsInParallel(CompleteTestList& testList)
{
for_each(testList.begin(), testList.end(), RunMappedTests);
}
当然,简单的解决方法是将RunMappedTests的参数更改为按值传递而不是传递引用。不幸的是,在这种情况下,它会带来巨大的性能损失。它必须复制一个字符串,和一个~64字节数据块的列表。复制的数量是可怕的。我还需要修改地图中的原始元素。
之前有人处理过此事吗?我不知道的任何简单修复?
答案 0 :(得分:3)
std::map<T1, T2>::value_type
是std::pair<const T1, T2>
。将RunMappedTests
的参数更改为pair<const string, list<DefaultTestContext>> &
。