0

構造体の両端キューを1つだけでなく、2つの値でソートする方法を理解しようとしています。私が持っているコードは私が持っているものであり、完全に分類されarrivalますが、2つのアイテムが同じもので入ってくる場合は、pidそれらもpidの順序で並べてください。私は理にかなっていると思います!

例えば:

1のプロセスと10のプロセスは、 pid1のプロセスが元々両端キューの後半にある場合でも、2arrivalのプロセスの前に10のプロセスがある必要があります。pidarrivalpid

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

なぜ関数ポインタではなく関数オブジェクトを使用しているのか疑問に思われる方のために: この関数オブジェクトのコードは完全にインライン化できます。関数ポインターを介した呼び出しはできません。

于 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 に答える