首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类向量降序排序

类向量降序排序
EN

Stack Overflow用户
提问于 2015-04-02 09:04:28
回答 2查看 149关注 0票数 0

我有一个类定义为

代码语言:javascript
复制
class chromosome
{
   vector<vector <int> > P(3,vector <int> (5,0));
   vector<int> F;       
}

我想按降序对F排序,与F对应的P将被排序。例如,排序之前的

代码语言:javascript
复制
    P    F
    101  4
    111  8
    001  2
    110  5
    100  3

后排序

代码语言:javascript
复制
    P    F
    111  8
    110  5
    101  4
    100  3
    001  2

如何通过C++实现它。我尝试在向量类中使用排序函数。但是,它只是排序F. P顺序是不改变的--这是我的代码

代码语言:javascript
复制
std::sort(F.rbegin(),F.rend());
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-02 09:06:30

这样做的方法是在将P的顺序与F的顺序相关联之后对它们进行排序,例如P中的第一个元素与F中的第一个元素等等。要做到这一点,可以使用make_pair命令。

代码语言:javascript
复制
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排序,命令应该是

代码语言:javascript
复制
sort(X.begin(), X.end())

在此之后,您需要将排序向量X的值放回FP中。为此,请执行以下操作:

代码语言:javascript
复制
for (int i = 0; i < F.size(); i++)
{
  F[i] = X[i].first;
  P[i] = X[i].second;
}
票数 0
EN

Stack Overflow用户

发布于 2015-04-02 09:14:25

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

一般而言:

  • 移动迭代器(operator++operator--)应该移动两个底层迭代器,
  • 比较应该只通过键进行比较。
  • 您必须在两个底层迭代器中处理元素交换。

看看同时排序两个数组。这是如何解决你的问题的详细描述。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29409020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档