У меня есть эти два vector<double>
mass
и velocity
одинакового размера N
.Они содержат информацию о массе и скорости N частиц.mass[i]
и velocity[i]
, таким образом, являются свойствами i-й частицы
Возможно ли в C ++ "заблокировать" эти два вектора вместе и отсортировать их в порядке возрастания массы?Таким образом, после сортировки вектор mass
должен быть в порядке возрастания, а вектор скорости должен содержать соответствующие скорости отсортированных масс
например, перед сортировкой массы = (4,2,1,3) и скорости= (13, 14,15,16) После сортировки массы = (1,2,3,4) и скорости = (15, 14, 16, 13)
Один (неэффективный) способ Iдля этого нужно передать данные в вектор структуры
struct particle
{
double mass;
double velocity;
bool operator < (const particle& str) const
{
return (mass < str.mass);
}
};
и создать vector<particle> particlelist(N)
, а затем отсортировать этот вектор, используя std::sort
, перегружая оператор <
, как я это делал вопределение выше.
Я не хочу помещать свои данные в моду Array of Structures, так как слышал, что они неэффективны по сравнению с подходом Structure of Arrays (по крайней мере, в CUDA).