"Locking"两个向量并对其进行排序
"Locking" two vectors and sorting them
我有两个相同大小的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)
我知道的一种(非有效)方法是将数据传输到struct的
向量中。struct particle
{
double mass;
double velocity;
bool operator < (const particle& str) const
{
return (mass < str.mass);
}
};
并创建vector<particle> particlelist(N)
,然后通过重载<
操作符使用std::sort
对这个向量进行排序,就像我在上面的定义中所做的那样。
我不想把我的数据放入数组结构时尚,因为我听说它是低效的相比,数组的结构方法(至少在CUDA)。
创建矢量索引;用0..N-1
struct CmpMass {
{
CmpMass(vector<double>& vec) : values(vec){}
bool operator() (const int& a, const int& b) const
{
return values[a] < values[b];
}
vector<double>& values;
}
sort(indexes.begin(), indexes.end(), CmpMass(mass));
比两个数组中元素的向量索引顺序要多。然后,您可以以正确的顺序创建质量/速度矢量或在访问期间转换索引:质量[索引[i]],速度[索引[i]]
至少据我所知,标准库中内置的排序算法都不会直接为您做这件事。最明显的可能是使用Boost Zip Iterator使这两个数组像单个集合一样运行。
为什么不使用std::pair
,因为你有两个链接的值,然后你可以实现你自己的比较方法/函数通过指针传递给std::sort
函数(存在一个支持std::sort
的重载版本)。
但是要确保实现了严格的弱排序,否则std::sort
可能会导致SEGFAULT
相关文章:
- 查找两个排序向量中共有的元素
- 高级选择排序 - 在一次迭代中搜索两个元素
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 合并两个排序链表时运行时出错
- 在 C++ 中合并两个排序链表
- 使用运算符+将两个已排序的链表合并到位
- 如何同时对两个或三个数组进行排序?
- 在这种单例实施中,是否可以对两个商店重新排序?
- 如何使用排序和比较这两个函数在 c++ 中对字符数组进行排序?
- 两个排序的链接列表C 的交点
- R- armadillo c :用其他两个向量对向量进行排序
- 使用推力使用sort_by_key对两个OpenGL缓冲区进行排序
- 合并两个排序的链表
- C 我将如何使用排序对这两个维数组进行排序
- 合并两个排序的列表 - 不起作用
- 按两个条件对lambda表达C 进行排序
- 是否存在用于按以下方式对两个范围进行排序和分区的标准算法?
- 使用不同的比较函数合并两个排序的双向量
- 使用两个条件对对象的向量进行排序
- 如何在没有 c++ 中的数组/算法的情况下对两个条件的字符串进行排序