轻松修复 - 对多个值的 deque 进行排序

Easy fix - sorting a deque on multiple values

本文关键字:deque 排序      更新时间:2023-10-16

我试图弄清楚如何在两个值上对结构体进行排序,而不仅仅是一个。 我拥有的代码是我所拥有的完美排序arrival,但如果两个项目具有相同的pid,我希望它们也按 pid 顺序排列。 我希望我说得有道理!

例如:

pid为 1 且arrival为 10 的进程

应该在pid为 2 且arrival为 10 的进程之前,即使具有 pid 1 的进程最初出现在双进程中。

struct Process{
    int pid;
    int burst;
    int arrival;
};
int sortOnArrival (Process const &a, Process const &b){
    return a.arrival < b.arrival;
}
int main(int argc, char *argv[]){
    deque<Process> readyQueue;
    // This is just pseudocode, but trust me, it works. :)
    fill(readyQueue);
    sort(readyQueue.begin(), readyQueue.end(), sortOnArrival);
}

只需使用合适的比较对象即可。例如,您可以使用

struct sortOnPidAndArrival {
    bool operator()(Process const& p0, Process const& p1) const {
        return std::tie(p0.pid, p0.arrival) < std::tie(p1.pid, p1.arrival);
    }
};

如果您想知道为什么我使用函数对象而不是函数指针:此函数对象中的代码可以完全内联。通过函数指针进行的调用不能。

比较函数需要考虑比较的所有要求。

int sortOnArrival (Process const &a, Process const &b) {
    if( a.arrival == b.arrival ) return a.pid < b.pid;
    return a.arrival < b.arrival;
}