我正在尝试使用对应的双精度向量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
任何人都可以看到我在做什么吗?
答案 0 :(得分:1)
对I
中的值0
进行排序,就好像它是x2
又名x_values[0]
。
-0.3
中的值1
被排序为x2
或x_values[1]
。
所以排序后的向量是-0.2
对应于0 0 1 1
我不明白你的困惑,为什么你还要别的东西。
让我改一下比较者的工作:
如果-0.3 -0.3 -0.2 -0.2
,则i1
的 x2
在i2
的{{1}}之前