【发布时间】:2022-01-18 07:01:35
【问题描述】:
代码如下。
int main()
{
map<int,int> a;
for (int i = 0; i < 6; i++)
{
a.insert(make_pair(i, i+1));
}
map<int,int>::iterator it;
#pragma omp parallel for default(none) shared(a)
for (it = a.begin(); it != a.end(); it++)
{
printf("the first is %d\n", it->first);
}
return 0;
}
代码编译失败。但是我可以使用向量迭代器,代码如下:
int main()
{
vector<int> vec(23,1);
vector<int>::iterator it;
// map<int,int>::iterator it;
#pragma omp parallel for default(none) shared(vec)
for (it = vec.begin(); it < vec.end(); it++)
{
printf("the number is %d\n", *it);
}
return 0;
}
向量迭代器可以正常工作。我怎样才能像使用向量迭代器一样直接将for循环与map迭代器并行化?最新的 OpenMP 版本 (5.2) 已发布,OpenMP website。我可以通过最新的 OpenMP API 做到这一点吗?
【问题讨论】:
-
能否包含编译器错误?
-
为什么不将地图迭代器存储在向量中,然后循环使用呢?