我正在尝试使用openMP遍历c++中的 map ,但是出现了三条错误消息:
我的循环的初始化,终止和增量格式不正确,并且我在使用openmp时还很陌生,那么有什么办法可以解决这个问题,同时获得与串行结果相同的结果?以下是我使用的代码

map< int,string >::iterator datIt;
#pragma omp parallel for
for(datIt=dat.begin();datIt!=dat.end();datIt++) //construct the distance matrix
{
...............
}

最佳答案

您的OpenMP实现可能与STL迭代器不兼容。虽然有一些changes to the standard to make OMP more compatible with the STL,但我认为您会发现您的实现不支持这种行为。我遇到的大多数OpenMP实现最多都是2.5版,Microsoft C++是2.0版。我知道唯一支持3.0的编译器是Intel C++编译器。

其他几点,您应该使用std::begin和std::end。另外,您要么需要将循环不变式声明为私有(private),要么让OpenMP自己将其弄清楚,就像这样:

#pragma omp parallel for
for(map< int,string >::iterator datIt = std::begin(dat);
    datIt != std::end(dat);
    datIt++)
{
     //construct the distance matrix...
}

但是没有3.0支持,这是没有意义的。

关于c++ - 在 map 上使用openmp进行迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8848870/

10-12 21:50