【问题标题】:Sort vector of int from Highest to Lowest [duplicate]从最高到最低对int的向量进行排序[重复]
【发布时间】:2014-06-30 15:49:05
【问题描述】:

我在vector<int> jobs;下面有一个向量

其中我有一堆数字,可以说 [4,6,2,7,262,15,623,9]

如何将此向量从最高到最低的数字排序?所以最高的数字在前面?

我试过用这个,但没用。程序崩溃。

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

std::sort (JobPool.end(), JobPool.begin(), myobject);

【问题讨论】:

  • “程序崩溃”是一个糟糕的描述。如果您想获得有用的答案,请发布崩溃程序的整个代码,并描述您提供的导致崩溃的输入。尝试从您的程序中删除尽可能多的代码。
  • 啊,是std::reverse(myvector.begin(),myvector.end());
  • 如果你使用rbeginrend,那么它会一次性进行反向排序。
  • @sonicboom,无需在顶部添加。看我的链接。它有两个按降序排序的示例和其他可以调整的示例。

标签: c++ vector


【解决方案1】:

beginend 迭代器的顺序错误。您应该将std::sort 称为:

std::sort(JobPool.begin(), JobPool.end(), myobject);

那么你应该让比较器实际上是一个以相反顺序工作的比较器:

struct myclass {
    bool operator()(int i, int j) const { return j<i; }
} myobject;

那么你应该注意到标准库已经提供了std::greater

std::sort(JobPool.begin(), JobPool.end(), std::greater<int>());

【讨论】:

  • 不过会从最低到最高。
  • 如果您想以原始方式交换迭代器,请使用反向迭代器:std::sort(JobPool.rbegin(), JobPool.rend());
  • 是的,我现在明白了,我在开始和结束时订购了错误的代码
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多