【问题标题】:Sorting Of two arrays两个数组的排序
【发布时间】:2015-05-25 05:37:15
【问题描述】:

假设给了我两个数组。对于 ex- 处理它们的到达时间和完成时间。 我想根据完成时间排序。在完成时间的基础上,到达时间也应该排序。 为此,我可以使用冒泡排序或选择排序。 但是有没有为此目的的STL? 我可以使用 sort() 函数进行一些修改吗?

【问题讨论】:

标签: c++ sorting stl


【解决方案1】:

一种方法是创建(结束,开始)对的向量(按此顺序 - 下文解释),对其进行排序,然后拆分已排序输出的对:

#include <utility> // For pair
#include <algorithm> // For sort

std::vector<std::pair<size_t, size_t>> intervals;
for(size_t i = 0; i < start.size(); ++i)
    intervals.push_back(std::make_pair(end[i], start[i]));

std::sort(std::begin(intervals), std::end(intervals)); // (*)

start.clear();
end.clear();
for(size_t i = 0; i < start.size(); ++i)
{
    end[i] = intervals[i].first;
    start[i] = intervals[i].second;
}

注意带有(*) 注释的行。 STL pairs' order is lexicographic,我们在这里利用(排序对将免费按firsts 排序)。

【讨论】:

    【解决方案2】:

    您可以将仿函数传递给std::sort 或为您的数据提供operator &lt;

    struct MyClass
    {
        std::size_t arrivalTime;
        std::size_t finishTime;
    };
    
    std::vector<MyClass> myClasses = //..
    std::sort(myClasses .begin(), myClasses.end(),
              [](const MyClass& lhs, const MyClass& rhs) {
                  return std::tie(lhs.finishTime, lhs.arrivalTime)
                         < std::tie(rhs.finishTime, rhs.arrivalTime);
             });
    

    或者干脆

    bool operator< (const MyClass& lhs, const MyClass& rhs)
    {
        return std::tie(lhs.finishTime, lhs.arrivalTime)
               < std::tie(rhs.finishTime, rhs.arrivalTime);
    }
    

    及以后:

    std::sort(myClasses .begin(), myClasses.end());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多