按类向量的降序排序

时间:2015-04-02 09:04:29

标签: c++ sorting

我有一个定义为

的类
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());

2 个答案:

答案 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]));

这将创建一个由FP元素组成的向量。在此之后,您需要对数组进行排序。调用简单排序函数的方式是首先比较第一个元素,然后是第二个元素。因此,要对向量X进行排序,命令将为

sort(X.begin(), X.end())

在此之后,您需要将已排序的向量X中的值放回FP。要做到这一点:

for (int i = 0; i < F.size(); i++)
{
  F[i] = X[i].first;
  P[i] = X[i].second;
}

答案 1 :(得分:0)

使用STL按键排序并非易事。使用std::sort排序需要beginend的单个迭代器,因此您必须编写一些将两个向量作为单个迭代器处理的包装器。

一般来说:

  • 移动迭代器(operator++operator--)应移动2个底层迭代器,
  • 比较应仅按键
  • 进行比较
  • 你必须处理2个底层迭代器中的元素交换

看看Sorting two arrays simultaneously。它详细描述了如何解决您的问题。

或者,您可以考虑使用map< int, vector<int> >而不是两个向量吗?