c++ - 根据额外参数对 vector 进行排序

标签 c++ sorting vector

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

vector<object*>* vec;

它恰好保存了当前可能与另一个对象发生碰撞的对象的信息。这很好——但我需要根据与根对象的距离对这个 vector 进行排序,但我不知道这样做的最佳方法。

就目前而言,对象对另一个结构的另一个临时 vector 进行排序

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 的对象现在被删除。

但是我真的很想对原始 vector 进行排序,而不是创建这个临时 vector 。那可能吗?如果是,怎么办?

最佳答案

尝试带参数的仿函数:

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));

关于c++ - 根据额外参数对 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669971/

相关文章:

c++ - 破译 C/C++ 函数指针类型定义的工具

javascript - 根据时间字符串值对对象数组进行排序?

C++ "select"算法

c++ - MPI 在 C++ 中发送具有 vector 属性的结构

c++ - C++ 中的 POD 类型是什么?

c++ - 概括具有不同相似类型的 C++ 代码的方法

c++ - 异常安全 move 运算符

internationalization - ICU 是否处理不同语言的字符串列表的整理?

python - 将按行排序的数据帧映射到原始列标签(Pandas),但仅限那些值大于零的标签

java - Java Vector 中的唯一数字