我使用C ++按f的降序对2个向量P和f进行排序。例如,我有
P f
1000 3
0001 3
1100 2
1000 3
我的预期输出是 P f 1000 3 0001 3 1000 3 1100 2
这意味着如果它是f的高值但是orignal顺序(在P中)更大则必须排序。对于我的例子,第二和第三个具有相同的f = 3。但是0001的顺序是2,1000的顺序是3.所以1000在0001之后排序。我试过这个代码但是它变成了
P f
1000 3
1000 3
0001 3
1100 2
如何修改?感谢
vector<vector <int> > P;
std::vector<double> f;
P.resize(4);
for (unsigned int i = 0 ; i < P.size(); ++i)
{
P[i].resize(4);
}
P[0][0]=1;
P[0][1]=0;
P[0][2]=0;
P[0][3]=0;
P[1][0]=0;
P[1][2]=0;
P[1][2]=0;
P[1][3]=1;
P[2][0]=1;
P[2][3]=1;
P[2][2]=0;
P[2][3]=0;
P[3][0]=1;
P[3][4]=0;
P[3][2]=0;
P[3][3]=0;
f=get_f(P);// Don't care --It will return 3 3 2 3
for(int i=0;i<N;i++)
{
for(int j=0;j<4;j++)
{
cout<<P[i][j];
}
cout<<endl;
}
cout<<endl;
vector< pair<double, vector<int> > > X;
for (int i=0;i<N;i++)
X.push_back(make_pair(f[i],P[i]));
////Sorting fitness descending order
stable_sort(X.rbegin(), X.rend());
for(int i=0;i<4;i++)
{
P[i]=X[i].second;
f[i]=X[i].first;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
cout<<P[i][j];
}
cout<<endl;
}
答案 0 :(得分:2)
您可以使用std::stable_sort
来保留等效元素的相对顺序:
std::stable_sort(X.rbegin(), X.rend(),
[](const auto&lhs, const auto& rhs) { return lhs.first < rhs.first; });