Я основываю свой вопрос на ответе на этот вопрос:
Как получить перестановку индекса после сортировки
У меня есть два std :: vectors :
std::vector<int> time={5, 16, 4, 7};
std::vector<int> amplitude={10,17,8,16};
Я хочу упорядочить векторы для увеличения времени, поэтому в конечном итоге они будут:
TimeOrdered={4,5,7,16};
AmplitudeOrdered={8,10,16,17};
После завершения я хочу добавить оба упорядоченных вектора в ЦЕРН ROOT TTree. Я искал решения в Интернете и нашел приведенный выше пример, где главный ответ - использовать следующий код:
vector<int> data = {5, 16, 4, 7};
vector<int> index(data.size(), 0);
for (int i = 0 ; i != index.size() ; i++) {
index[i] = i;
}
sort(index.begin(), index.end(),[&](const int& a, const int& b) {
return (data[a] < data[b]);
}
);
for (int ii = 0 ; ii != index.size() ; ii++) {
cout << index[ii] << endl;
}
Что мне нравится, потому что это просто, не требует слишком много строк и оставляет меня с двумя простыми векторами, которые я могу затем легко использовать для моего TTree.
Поэтому я попытался обобщить его:
void TwoVectorSort(){
std::vector<int> data={5, 16, 4, 7};
std::vector<int> data2={10,17,8,16};
sort(data2.begin(), data2.end(),[&](const int& a, const int& b) {
return (data[a] < data[b]);
}
);
for (int ii = 0 ; ii != data2.size() ; ii++) {
std::cout <<data[ii]<<"\t"<< data2[ii]<<"\t"<< std::endl;//<<index[ii]
}
}
Но это не только не работает, но и дает мне каждый раз что-то другое Я запускаю его как макрос с ROOT 6.18 / 04, используя .x TwoVectorSort.cpp +.
Может кто-нибудь сказать мне, почему это не работает и что является самым простым решением? Я ни в коем случае не эксперт C ++, поэтому я надеюсь, что ответы не будут слишком техническими!
Заранее спасибо!