我有两个大小相同的vector<double>,它们分别是mass和velocity。它们包含N个粒子的质量和速度信息。因此,mass[i]和velocity[i]是第i个粒子的属性。
在C++中可以将这两个向量"锁定"在一起,并按质量升序排序吗?因此,在排序后,向量mass应按递增顺序排列,并且velocity向量应包含已排序质量的相应速度。
例如,在排序之前mass = (4,2,1,3)和velocity = (13, 14,15,16),排序之后mass=(1,2,3,4)和velocity =(15, 14, 16, 13)。
我知道这种情况下(非高效方法)将数据传输到结构体的向量中。
在C++中可以将这两个向量"锁定"在一起,并按质量升序排序吗?因此,在排序后,向量mass应按递增顺序排列,并且velocity向量应包含已排序质量的相应速度。
例如,在排序之前mass = (4,2,1,3)和velocity = (13, 14,15,16),排序之后mass=(1,2,3,4)和velocity =(15, 14, 16, 13)。
我知道这种情况下(非高效方法)将数据传输到结构体的向量中。
struct particle
{
double mass;
double velocity;
bool operator < (const particle& str) const
{
return (mass < str.mass);
}
};
创建vector<particle> particlelist(N)
,然后使用重载<
运算符的方式通过std::sort
对该向量进行排序,如上述定义所示。
我不想采用结构体数组的方式存储数据,因为我听说相比于数组结构,这种方式效率低下(至少在CUDA中是这样)。
sort(zip(mass.all(), velocity.all()))
- R. Martinho Fernandes