2011-10-06 92 views
1

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

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的物体现在被擦除。

但是我真的很想排序原始矢量,而不是创建这个临时矢量。那可能吗?如果是这样,怎么样?

回答

6

尝试用仿函数参数:

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

啊哈!那很完美! – ultifinitus

+0

哎呀,在分拣机结构的末尾错过了分号 – ultifinitus