在C ++中使用另一向量对一个向量进行Lambda排序

时间:2018-10-18 00:45:47

标签: c++ sorting stdvector

我正在尝试使用对应的双精度向量x_values对向量x2中的int索引列表进行排序。我正在x2上使用std :: sort使用查看x_values的比较器。但是,输出结果不是我所期望的,我也不知道为什么。

以下是一些示例代码来显示我在说什么:

#include <iostream>
#include <string>
#include <vector>
#include <numeric>
#include <algorithm>

int main()
{
    int numParticles = 2;
    std::vector<double> x_values(4);

    std::vector<int> x2(4);

    std::iota(x2.begin(), x2.begin() + numParticles, 0);
    std::iota(x2.begin() + numParticles, x2.end(), 0);

    x_values = { -0.3,-0.2,-0.1,1.0 };

    std::cout << "\nx values presort: \n";
    for (int i = 0; i < 4; i++) {
        std::cout << x_values[i] << " " << x2[i] << "\n";
    }

    std::sort(x2.begin(), x2.end(), [&x_values](int i1, int i2) {return x_values[i1] < x_values[i2]; });

    std::cout << "\nx index post sort: \n";
    for (int i = 0; i < 4; i++) {
        std::cout << x2[i] << "\n";
    }
}

第一个输出给出的结果是:

x values presort: 
-0.3 0
-0.2 1
-0.1 0
1 1

第二个显示为:

x index post sort: 
0
0
1
1

我希望第二个给出的输出为:

x index post sort: 
0
1
0
1

任何人都可以看到我在做什么吗?

1 个答案:

答案 0 :(得分:1)

I中的值0进行排序,就好像它是x2又名x_values[0]
-0.3中的值1被排序为x2x_values[1]

所以排序后的向量是-0.2对应于0 0 1 1

我不明白你的困惑,为什么你还要别的东西。


让我改一下比较者的工作:

如果-0.3 -0.3 -0.2 -0.2,则i1

x2i2的{​​{1}}之前