dimanche 21 janvier 2018

sorting and compacting an unoredered_set

I have a voxel mesh which I tend to to create an ordered vertex container:

Here is what I do:

tbb::concurrent_unordered_set<size_t> nodes_ids;
tbb::parallel_for_each(begin(voxel_ids), end(voxel_ids), [&](size_t e)
    {
    auto voxelNodes = GetVoxelNodes(e);
    nodes_ids.insert(voxelNodes.begin(), voxelNodes.end());
    });

    std::vector<size_t> ordered_ids;
    ordered_ids.reserve(nodes_ids.size());
    ordered_ids.insert(ordered_ids.begin(), nodes_ids.begin(), nodes_ids.end());
    tbb::parallel_sort(ordered_ids);

Please note:

  • Problem is in 3D, so each voxel has 8 nodes;
  • Order of voxel container (voxel_ids) is about 10E+5;
  • Since many vexels are next to each other, any suggestion for compacting result (nodes_ids)? I mean, instead of using vector<size_t>, I use something like vector<pair<size_t, size_t> >; Where first element in pair is start of a nodes_id sequence and second element in pair is the last element in the sequence.

Aucun commentaire:

Enregistrer un commentaire