0

我试图弄清楚如何对两个值的结构双端队列进行排序,而不仅仅是一个。我拥有的代码是我拥有的完美排序的代码arrival,但是如果两个项目具有相同的内容pid,我希望它们也以 pid 顺序排列。我希望我说得通!

例如:

apid为 1 且 anarrival为 10 的进程应该在具有pid2 且 anarrival为 10 的进程之前,即使具有pid1 的进程最初在双端队列中较晚。

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);
}
4

2 回答 2

6

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

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

In case you wonder why I'm using a function object rather than a function pointer: The code in this function object can entirely be inlined. The call through a function pointer cannot.

于 2012-11-13T21:18:25.287 回答
3

您的比较功能需要考虑比较的所有要求。

int sortOnArrival (Process const &a, Process const &b) {
    if( a.arrival == b.arrival ) return a.pid < b.pid;
    return a.arrival < b.arrival;
}
于 2012-11-13T21:17:56.773 回答