Сортировать вектор по дополнительным параметрам - PullRequest
1 голос
/ 06 октября 2011

У меня есть указатель на вектор указателей на объекты

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 Ответ

6 голосов
/ 06 октября 2011

Попробуйте функтор с параметрами:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...