インデックス テーブルからの順序を維持する選択は、シリアル コードでは簡単ですが、マルチスレッドでは、特にリンク リストを回避することによって効率 (マルチスレッドの要点) を維持したい場合は、それほど単純ではありません。シリアルコードを考える
template<typename T>
std::vector<T> select_in_order(
std::vector<std::size_t> const&keys, // permutation of 0 ... key.size()-1
std::vector<T> const&data) // anything copyable
{ // select data[keys[i]] allowing keys.size() >= data.size()
std::vector<T> result;
for(auto key:keys)
if(key<data.size())
result.push_back(data[key]);
return result;
}
これをマルチスレッド化するにはどうすればよいdata.size() < key.size()
ですか(TBB や OpenMP を使用するなど)。