Я пытаюсь понять, как сортировать деку структур по двум значениям, а не по одному. У меня есть код, который отлично сортирует по 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;
}