C ++按照另一个的值对数组进行排序

时间:2015-11-04 15:30:36

标签: c++ arrays sorting stl

我试图按距离顺序(双数组)对向量(deque(int))进行排序。

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

我不知道如何修复它。上面写的方式,&#34;不能将size_t转换为deque(int)等...&#34;发生错误。

2 个答案:

答案 0 :(得分:1)

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) { ... });

答案 1 :(得分: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;
    }`