我有一个类定义为
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++实现它。我尝试在向量类中使用排序函数。但是,它只是排序F. P顺序是不改变的--这是我的代码
std::sort(F.rbegin(),F.rend());发布于 2015-04-02 09:06:30
这样做的方法是在将P的顺序与F的顺序相关联之后对它们进行排序,例如P中的第一个元素与F中的第一个元素等等。要做到这一点,可以使用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;
}发布于 2015-04-02 09:14:25
使用STL按键排序并不容易。使用std::sort进行排序需要针对begin和end的单迭代器,因此您必须编写一些包装器,将两个向量作为单迭代器处理。
一般而言:
operator++和operator--)应该移动两个底层迭代器,看看同时排序两个数组。这是如何解决你的问题的详细描述。
或者,您可以考虑使用map< int, vector<int> >而不是两个向量吗?
https://stackoverflow.com/questions/29409020
复制相似问题