基于额外参数排序向量

Sort vector based on extra parameters

本文关键字:向量 排序 参数 于额外      更新时间:2023-10-16

我有一个指向对象指针向量的指针

vector<object*>* vec;

恰好保存了当前可能与另一个对象发生碰撞的对象的信息。这很好,但是我需要根据到根对象的距离对向量排序,我不知道最好的方法。

对象对另一个结构体

的另一个临时向量进行排序
struct tempsort{
int distanceFromObject;
object* obj;
}

使用如下函数:

bool sorter(tempsort* first, tempsort* second){
  return first->distanceFromObject < second->distanceFromObject;
}
实现:

vector<tempsort*> tosort;
for (int a = 0; a < vec->size(); a++){
  tosort.push_back(new tempsort);
  tempsort.distanceFromObject = distanceBetweenObjects(host,(*vec)[a]);
  tempsort.obj=(*vec)[a];
}
sort(tempsort.begin(),tempsort.end(),sorter);

对象现在可以解决碰撞

Tempsort的对象现在被擦除。

然而,我真的想对原始向量排序,而不是创建这个临时向量。这可能吗?如果有,怎么做?

尝试带参数的functor:

struct sorter
{
    object *host;
    sorter(object *host) : host(host) { }
    bool operator()(object* first, object* second){
      return distanceBetweenObjects (host,first) < distanceBetweenObjects (host,second);
    }
};
sort(tosort.begin(), tosort.end(),sorter(host));