Я пытаюсь отсортировать список индексов int в векторе x2, используя соответствующий двойной вектор x_values.Я использую std :: sort на x2, используя компаратор, который смотрит на 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
Кто-нибудь может увидеть, что я делаю неправильно?