2011-05-23 41 views
1

當嘗試下面的代碼:VS2010並行模式庫(PPL)parallel_for_each算法是否支持std :: set <>?

 Concurrency::concurrent_vector<int> results_temp; 
     std::set<int > temp; 

     Concurrency::parallel_for_each(temp.begin(), temp.end(),[&](int p) { 
       results_temp.push_back(p); 

     }); 

我得到以下編譯時錯誤:

1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ppl.h(2081): error C2440: '=' : cannot convert from 'const int *' to 'int *' 

我設法得到parallel_for_each與std::deque<>std::list<>std::vector<>std::map<>工作。 我很好奇如何讓它爲std::set<>工作,或者爲什麼它不被支持。

回答

2

示例代碼爲我編譯沒有錯誤。

我添加了這些包括:

#include <ppl.h> 
#include <concurrent_vector.h> 

你已經安裝了SP1?

+0

我相信這是我的問題。我已經在這裏證實:[Description of Visual Studio 2010 Service Pack 1](http://support.microsoft.com/kb/983509)在'** Concurrency Runtime **'下列出'相關容器可以與「parallel_for_each」功能「。一旦我安裝了VS2010-SP1,我會確認它的工作原理。 – ChetS 2011-05-26 00:14:37

+0

SP1解決了這個問題。感謝你的回答! – ChetS 2011-05-27 05:52:24

+0

如果您使用的是Visual Studio IDE的更高版本,但是使用VS 2010進行編譯,則仍然需要安裝VS2010的SP1。 VS的更高版本的更新不會安裝此Service Pack。 – ChetS 2016-08-17 20:20:13

0

如果因任何原因,沒有Concurrency::concurrent_set,然後通過各種手段使用 Concurrency::concurrent_map<T, unused_type>

理想的情況下,unused_type會以這樣的方式被填充,即std::pair<T, unused_type>可以emply空基類優化。測試和配置文件。如果是這樣,你就完成了。

四件事

  1. 我知道這只是輕微跛足
  2. 假設concurrent_mapstd::map語義
  3. 次要假設concurrent_map使用對
  4. 我不實際使用PPL (我用GNU libgomp with parallel mode
+0

感謝您的回答,但我想要改變的是:std :: set temp;而不是併發:: concurrent_vector results_temp;我正在通過做你的建議來解決這個問題:std :: map 其中我大多忽略了bool。 – ChetS 2011-05-23 23:16:40

相關問題