Hi,
I would like to know how/ what possibilities I have to rearrange a std::vector, assuming that I know in which order I want the elements to be rearranged. The sorting/ finding out the new order I've already covered and saved in a 'newIndex' int vector.The only possibility I thought of is making a copy of the original vector and then copy it back in the right order, but that feels like a waste of memory/ performance.
Can someone give me some directions?
bool CRenderQueue::SortBucketBlended()
{
if(mEffectDataCreated)
{
size_t bucketSize = mRenderBucketBlended.size();
std::vector<int> indexTemp;
std::vector<int> orderTemp;
std::vector<float> distToCam;
indexTemp.resize(bucketSize);
orderTemp.resize(bucketSize);
distToCam.resize(bucketSize);
for(size_t init=0;init<bucketSize;++init) orderTemp[init] = init;
for(size_t renderable=0;renderable<mRenderBucketBlended.size();++renderable)
{
indexTemp[renderable] = renderable;
distToCam[renderable] = mRenderBucketBlended[renderable].DistToCam;
}
sort(orderTemp.begin(), orderTemp.end(), [&](int a, int b)
{ return distToCam[a] > distToCam[b]; });
std::vector<int> newIndex;
newIndex.resize(bucketSize);
for(size_t results=0;results<bucketSize;++results)
newIndex[results] = indexTemp[orderTemp[results]];
// re-arrange the blended bucket based on newIndex?
return true;
}
else return false;
}