并行迭代unordered_map,没有用于键的辅助容器

时间:2018-04-12 21:46:39

标签: c++ openmp

意图是与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

他们是否有办法避免创建这种辅助数据结构?

0 个答案:

没有答案