意图是与std::unordered_map
并行迭代OpenMP
,如下所示:
std::unordered_map<int, int> ht;
// add key-value pair in the unordered_map
#pragma omp taskloop
for (auto i = ht.begin(); i != ht.end(); ++i) {
std::cout << i->first << "\t" << i->second << std::endl;
}
但是,OpenMP
forn并行不允许!=
出于正当理由,如现有stackoverflow post中所述。
一种方法是保留辅助数据结构,例如&#st; :: vector&#39;跟踪所有密钥并执行以下操作:
std::vector<int> keys_ht;
// add keys in keys_ht
#pragma omp taskloop
for (int i = 0; i < keys_ht.size(); ++i) {
std::cout << keys_ht[i] << "\t" << ht[keys_ht[i]] << std::endl;
}
上述策略需要额外的存储空间,并且每个元素的额外散列为std::unordered_map
。
他们是否有办法避免创建这种辅助数据结构?