相关疑难解决方法(0)

C++排序和跟踪索引

使用C++,希望是标准库,我想按升序对一系列样本进行排序,但我还想记住新样本的原始索引.

例如,我有一个集合,矢量或样本矩阵A : [5, 2, 1, 4, 3].我想对这些进行排序 B : [1,2,3,4,5],但我也想记住值的原始索引,所以我可以得到另一个集合: C : [2, 1, 4, 3, 0 ]- 它对应于'B'中每个元素的索引,在原始'一个'.

例如,在Matlab中你可以这样做:

 [a,b]=sort([5, 8, 7])
 a = 5 7 8
 b = 1 3 2
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到这样做的好方法吗?

c++ sorting indexing stl

203
推荐指数
7
解决办法
11万
查看次数

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

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

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

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万
查看次数

创建排序向量的索引向量

变量x是一个nint 的向量,我想按升序对向量进行排序.但是,由于这个问题范围之外的原因,我想要保持不变.因此,x我想创建另一个n索引向量,而不是实际排序内容,其中每个索引引用相应的值x,如果x已经排序的话.

例如:

std::vector<int> x = {15, 3, 0, 20};
std::vector<int> y;
// Put the sorted indices of x into the vector y
for (int i = 0; i < 4; i++)
{
    std::cout << y[i];
}
Run Code Online (Sandbox Code Playgroud)

应该给出输出:

2
1
0
3
Run Code Online (Sandbox Code Playgroud)

对应于x中的值:

0
3
15
20
Run Code Online (Sandbox Code Playgroud)

我可以想到很多及时实现这一点的方法,但我想知道STL是否有内置功能可以为我高效执行此操作?

c++ stl

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

标签 统计

c++ ×3

stl ×2

c++11 ×1

indexing ×1

sorting ×1