我想按距离(这是双数组)排序向量(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