两个数组的排序
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());
假设我有两个 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());