根据额外参数对向量进行排序
Posted
技术标签:
【中文标题】根据额外参数对向量进行排序【英文标题】: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 的对象现在被删除了。
但是,我真的很想对原始向量进行排序,而不是创建这个临时向量。那可能吗?如果有,怎么做?
【问题讨论】:
【参考方案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));
【讨论】:
哎呀,在排序器结构的末尾错过了一个分号以上是关于根据额外参数对向量进行排序的主要内容,如果未能解决你的问题,请参考以下文章