两个数组的排序

Sorting Of two arrays

假设我有两个 array.For ex-Process 及其到达时间和完成时间。 我想根据finish time.On Finish Time,Arrival Time 来排序,也应该排序。 为此,我可以使用冒泡排序或选择排序。 但是有没有为此目的的STL? 我可以使用 sort() 函数并进行一些修改吗?

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

#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,我们在这里利用它(排序对将免费按 first 排序)。

您可以将函子传递给 std::sort 或为您的数据提供 operator <

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