【发布时间】:2011-10-18 15:33:42
【问题描述】:
我有一张想要遍历的元素地图。当然,这样做的标准方法是使用 for 循环
for (map<string, int> iterator it = myMap.begin(); it != myMap.end(); ++it) {
string thisKey = it->first;
int thisValue = it->second;
}
但如果我尝试使用 OpenMP 的 parallel for 构造使这个循环并行运行,它就不起作用,而且这(显然)是一个已知问题,因为它无法识别这种类型循环构造。
所以,我的备份计划是使用整数索引迭代器,并按索引访问键和值的列表,就像我在 C# 中所做的那样:
for (int i = 0; i < myMap.Count; ++i) {
string thisKey = myMap.Keys[i];
string thisValue = myMap.Values[i];
}
...但我似乎无法在 C++ 中找到等效的方法。有没有办法在我不知道的 C++ 中做到这一点?
【问题讨论】:
-
您确定
std::map是实现目标的最佳容器吗? -
遍历map是遍历树,不是简单的操作。即使您能够以您想要的方式对其进行索引,它也不会为您并行化。
-
你的这张地图有几对?
-
马克:谢谢,这几乎回答了我的问题。我认为我当前的解决方案(遍历树并将结果复制到向量中,然后遍历向量)可能是最好的方法。 JK:对于这个特定的应用程序,99991。
标签: c++ dictionary iterator openmp stdmap