我试图弄清楚如何对两个值(而不只是一个值)的双端队列进行排序。我所拥有的代码是我在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);
    }
};


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

关于c++ - 轻松解决-在多个值上排列双端队列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13368929/

10-11 18:56