如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?
例如,假设我有两个相同大小的向量:
vector<MyObject> vectorA;
vector<int> vectorB;
Run Code Online (Sandbox Code Playgroud)
然后我vectorA使用一些比较函数排序.排序重新排序vectorA.如何应用相同的重新排序vectorB?
一种选择是创建一个结构:
struct ExampleStruct {
MyObject mo;
int i;
};
Run Code Online (Sandbox Code Playgroud)
然后对包含内容vectorA并将其vectorB压缩为单个向量的向量进行排序:
// vectorC[i] is vectorA[i] and vectorB[i] combined
vector<ExampleStruct> vectorC;
Run Code Online (Sandbox Code Playgroud)
这似乎不是一个理想的解决方案.还有其他选择,特别是在C++ 11中吗?
我有几个std::vector,全长相同.我想对这些向量中的一个进行排序,并将相同的变换应用于所有其他向量.这样做有一个简洁的方法吗?(最好使用STL或Boost)?一些向量包含ints,其中一些包含std::strings.
伪代码:
std::vector<int> Index = { 3, 1, 2 };
std::vector<std::string> Values = { "Third", "First", "Second" };
Transformation = sort(Index);
Index is now { 1, 2, 3};
... magic happens as Transformation is applied to Values ...
Values are now { "First", "Second", "Third" };
Run Code Online (Sandbox Code Playgroud) 我有这个两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);
}
};
Run Code Online (Sandbox Code Playgroud)
vector<particle> particlelist(N)然后使用std::sortby重载<运算符创建然后对此向量进行排序,就像我在上面的定义中所做的那样.
我不想把我的数据放入Array of Structures时尚,因为我听说它与阵列结构方法相比效率低(至少在CUDA中).
我有一个包含类的对象的std::vector调用.假设有一个成员变量,我还实现了一个返回最小值和的函数.然后,我可以根据对象的值来做矢量.foo_vecFooFooint xCompareInts(int a, int b)abstd::sortx
但是,如果这些x值不是成员变量Foo,而是在另一个std::vector名称中,那该怎么办呢x_vec?这里,第一个元素x_vec对应于第一个元素foo_vec,依此类推.如何根据相应的值执行std::sort打开?foo_vecx_vec
我有一个标准向量包含,例如,以下元素
[-6, -7, 1, 2]
我需要将这些元素映射到1到4的范围.即我需要向量这样
[2, 1, 3, 4]
注意:第一个向量(-7)中的最小值被映射到第二个向量(1)中的最小值.如何用STL实现这一目标?
我有两个相同大小的矢量
vector<float> predictions; //say {1.22, 3.22, 2.22, 4.22}
vector<int> indices; //say {0, 1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
我使用降序按降序对预测中的值进行排序
std::sort(predictions.rbegin(), predictions.rend()); //gives {4.22, 3.22, 2.22, 1.22}
Run Code Online (Sandbox Code Playgroud)
现在我想要与预测同时对索引进行排序.
//to get {3, 1, 2, 0}
Run Code Online (Sandbox Code Playgroud)
如何在不使用boost和模板的情况下执行此操作?
我知道这个问题已经 被问 了好 几次,但是对于简单的情况(紧凑性,可读性或用户熟练程度是决定因素)提供了不同的答案,我不确定哪一个是最有效的,因为我担心重复该操作O(1M)次.
设置如下:
A和B的float的; 这不能改变,但可以从A和创建其他结构B.A并且B长度相等,至少为4,最多为20(如果这对任何方式都有帮助).A需要根据其条目的值按降序排序,而B只需要匹配A的顺序.例:
A = {2,4,3,1} -> {4,3,2,1}
| | | |
B = {1,2,3,4} -> {2,3,1,4}
Run Code Online (Sandbox Code Playgroud)
题:
这样做最有效(快速+节省内存)的方法是什么?