我想按距離(這是雙數組)排序向量(deque(int))總體。C++從另一個值排序數組
sort(population.begin(), population.end(), [&distance](size_t i1, size_t i2) { return distance[i1] < distance[i2]; });
我不知道如何解決它。上面寫的方式,「無法將size_t轉換爲deque(int)等......」錯誤發生。
我想按距離(這是雙數組)排序向量(deque(int))總體。C++從另一個值排序數組
sort(population.begin(), population.end(), [&distance](size_t i1, size_t i2) { return distance[i1] < distance[i2]; });
我不知道如何解決它。上面寫的方式,「無法將size_t轉換爲deque(int)等......」錯誤發生。
好了,我發現自己一個簡單的解決方案: 我匹配的距離和人口結構進入:
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;
}`
std::sort
需要一個二元運算符,它能夠比較傳入迭代器指定的相同類型的兩個元素。
您的情況decltype(population)::value_type != size_t
所以lambda不能用作正確的比較器。
它應該是這樣的,讓T
是你的總體元素:
vector<T> population;
sort(population.begin(), population.end(), [&distance](const T& i1, const T& i2) { ... });
但是現在如何定義比較器?距離[0]是總體[0]的總和距離。 – Fryzjer
顯示「人口」和「距離」的定義。 – Pawan
不知道'人口'這是不可能的評論它 –
載體>人口; double * distance = new double [population.size()]; –
Fryzjer