相关疑难解决方法(0)

如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?

如何以相同的方式对两个向量进行排序,使用仅使用其中一个向量的条件?

例如,假设我有两个相同大小的向量:

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中吗?

c++ c++11

74
推荐指数
3
解决办法
2万
查看次数

如何通过不同的std :: vector的值对std :: vector进行排序?

我有几个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)

c++ sorting boost stl vector

53
推荐指数
3
解决办法
3万
查看次数

"锁定"两个向量并对它们进行排序

我有这个两vector<double>massvelocity两个大小相同的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中).

c++ sorting stl

9
推荐指数
3
解决办法
3879
查看次数

使用另一个向量中的值对矢量进行排序

我有一个包含类的对象的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

c++

8
推荐指数
1
解决办法
1196
查看次数

将矢量映射到特定范围

我有一个标准向量包含,例如,以下元素

[-6, -7, 1, 2]

我需要将这些元素映射到1到4的范围.即我需要向量这样

[2, 1, 3, 4]

注意:第一个向量(-7)中的最小值被映射到第二个向量(1)中的最小值.如何用STL实现这一目标?

c++ stl vector

6
推荐指数
3
解决办法
178
查看次数

如何在不使用boost或创建模板的情况下在c ++中同时对两个向量进行排序?

我有两个相同大小的矢量

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和模板的情况下执行此操作?

c++ sorting vector

5
推荐指数
1
解决办法
4607
查看次数

将一个向量相对于另一个向量排序 - 最有效的方法?

我知道这个问题已经 被问 了好 几次,但是对于简单的情况(紧凑性,可读性或用户熟练程度是决定因素)提供了不同的答案,我不确定哪一个是最有效的,因为我担心重复该操作O(1M)次.

设置如下:

  • 两个向量ABfloat的; 这不能改变,但可以从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)

题:

这样做最有效(快速+节省内存)的方法是什么?

c++ sorting performance vector

1
推荐指数
1
解决办法
248
查看次数

标签 统计

c++ ×7

sorting ×4

vector ×4

stl ×3

boost ×1

c++11 ×1

performance ×1