【问题标题】:Sort vector based on extra parameters根据额外参数对向量进行排序
【发布时间】:2011-10-06 03:11:36
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ sorting vector


    【解决方案1】:

    尝试带参数的仿函数:

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

    【讨论】:

    • 哎呀,在排序器结构的末尾错过了一个分号
    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多