我想在我的代碼使用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字節的數據塊列表。複製的數量是可怕的。我也需要修改地圖中的原始元素。
以前有人處理過這個嗎?任何簡單的修復,我不知道?
什麼是'parallel_for_each'? – GManNickG 2010-02-14 20:16:30
對for_each的Microsoft擴展。他們是一樣的,除了一個人的parallized。使用for_each可以看到同樣的效果。 – 2010-02-14 20:19:58
好的,謝謝。這應該停止「這是parallel_for_each」問題的分支。 :P如果這是C++ 0x,順便說一句,使用'#include'和'std :: unordered_map'作爲容器。 'hash_map'擴展名是舊的,可能不推薦使用。如果將容器更改爲普通的「地圖」,是否會遇到同樣的問題?你的代碼對我來說看起來很好。我唯一能推薦的就是使用你的typedef;對於'RunMappedTests'的參數,使用'CompleteTestList :: value_type'來確保它是100%正確的。 (和'typedef''ing'std :: list '無法傷害。) –
GManNickG
2010-02-14 20:24:39