2015-11-04 4 views
-1

Я пытаюсь отсортировать векторную (deque (int)) по порядку расстояний (это двойной массив).C++ Сортировка массива по значениям из другого

sort(population.begin(), population.end(), [&distance](size_t i1, size_t i2) { return distance[i1] < distance[i2]; }); 

Я понятия не имею, как это исправить. Как это написано выше, ошибка «не может преобразовать size_t в deque (int) и т. Д.».

+1

показать определение «население» и «расстояние». – Pawan

+0

, не зная 'населения', прокомментировать это невозможно –

+0

vector > население; двойной * растояние = новый двойной [население.size()]; – Fryzjer

ответ

0

Ну, я нашел себе простое решение: я соответствует расстояние и население в составе:

struct popWithDist{ 
deque<int> *population; 
double distace; 
}; 

Затем было очень легко отсортировать его:

vector<popWithDist> pwd; 

    for(int i = 0; i < numberOfPopulation; i++){ 
     pwd.push_back({ &population[i], getWholeDist(population[i]) }); 
    } 
    //Sorting population by distance order: 
    sort(pwd.begin(), pwd.end(), [](popWithDist i1, popWithDist i2) { return i1.distace < i2.distace; }); 

    for (int i = 0; i < population.size(); i++){ 
     population[i] = *pwd[i].population; 
    }` 
1

std::sort ожидает бинарный оператор, который может сравнивать два элемента одного и того же типа, указанные переданными итераторами.

В вашем случае decltype(population)::value_type != size_t, поэтому лямбда нельзя использовать в качестве правильного компаратора.

Это должно быть что-то подобное, пусть T будет ваше население элемент:

vector<T> population; 
sort(population.begin(), population.end(), [&distance](const T& i1, const T& i2) { ... }); 
+0

Но как определить компаратор сейчас? Расстояние [0] является суммарным расстоянием населения [0]. – Fryzjer

Смежные вопросы