我有一个定义为
的类class chromosome
{
vector<vector <int> > P(3,vector <int> (5,0));
vector<int> F;
}
我想按降序排序F,并且对应与F对应的P将被排序。例如, 排序前
P F
101 4
111 8
001 2
110 5
100 3
排序后
P F
111 8
110 5
101 4
100 3
001 2
如何通过C ++实现它。我试图在vector类中使用sort函数。但是,它只排序F. P顺序不变 这是我的代码
std::sort(F.rbegin(),F.rend());
答案 0 :(得分:0)
执行此操作的方法是在将P
的顺序与F
的顺序相关联后对其进行排序,即P
中的第一个元素与F
中的第一个元素相关联1}}等等。为此,您可以使用make_pair
命令。
vector< pair<int, vector<int> > > X;
for (int i = 0; i < F.size(); i++)
X.push_back(make_pair(F[i], P[i]));
这将创建一个由F
和P
元素组成的向量。在此之后,您需要对数组进行排序。调用简单排序函数的方式是首先比较第一个元素,然后是第二个元素。因此,要对向量X
进行排序,命令将为
sort(X.begin(), X.end())
在此之后,您需要将已排序的向量X
中的值放回F
和P
。要做到这一点:
for (int i = 0; i < F.size(); i++)
{
F[i] = X[i].first;
P[i] = X[i].second;
}
答案 1 :(得分:0)
使用STL按键排序并非易事。使用std::sort
排序需要begin
和end
的单个迭代器,因此您必须编写一些将两个向量作为单个迭代器处理的包装器。
一般来说:
operator++
和operator--
)应移动2个底层迭代器,看看Sorting two arrays simultaneously。它详细描述了如何解决您的问题。
或者,您可以考虑使用map< int, vector<int> >
而不是两个向量吗?