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

SuJ*_*Jit 5 c++ sorting vector

我有两个相同大小的矢量

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

her*_*tao 7

您可以将这两个向量组合成一个类似的类型,std::vector<std::pair<int, float>>然后对其进行排序.比较功能可以是这样的:

bool compareFunc(std::pair<int, float> &a, std::pair<int, float> &b)
{
    return a.second > b.second;
}
Run Code Online (Sandbox Code Playgroud)

并对这些组合数据进行排序:

std::sort(data.begin(), data.end(), compareFunc);
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以获得已排序的部分,即其第一个组件.