我正在试图弄清楚如何在两个值上排序结构的双端队列,而不只是一个。我所拥有的代码就是arrival
上完美排序的代码,但是如果两个项目使用相同的pid
,我希望它们也是pid顺序。我希望我有意义!
例如:
pid
为1且arrival
为10的流程应位于pid
为2且arrival
为10的流程之前,即使pid
1的进程最初出现在deque中。
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);
}
答案 0 :(得分: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);
}
};
如果您想知道我为什么使用函数对象而不是函数指针:此函数对象中的代码可以完全内联。通过函数指针调用不能。
答案 1 :(得分:3)
您的比较功能需要考虑比较的所有要求。
int sortOnArrival (Process const &a, Process const &b) {
if( a.arrival == b.arrival ) return a.pid < b.pid;
return a.arrival < b.arrival;
}