1

私は現在、 Processと呼ばれるユーザー指定の数の構造体を保持するキューを持っています。プロセスは、pid、バースト、および到着で構成されます。キューを到着順に並べ替えたいのですが、どこから始めればよいかまったくわかりません。私が言おうとしていることを説明するのに役立つ擬似コードを次に示します。

struct Process{
    int pid;
    int burst;
    int arrival;
};

void function(int numProcesses){
    queue<Process> readyQueue;

    // The following loop is a shortened version of my code
    for(int i=0; i<numProcesses;i++){
        readyQueue.push(aProcess);
    }

    // This is where I need help!
    // sort(readyQueue);
}

これを行う方法について、またはそれが可能である場合でも、正しい方向に私を向けることができる人に感謝します。ありがとう!

4

4 に答える 4

3

std::sort'' ヘッダーから標準ライブラリを使用してソートできます。コンパレータを提供するか、less 演算子を定義することができます。

struct Process{
    int pid;
    int burst;
    int arrival;
};

    bool operator<(const Process& a, const Process& b) {
          return a.arrival < b.arrival;
    }

    void function(int numProcesses){
        std::dequeue<Process> readyQueue;

        // The following loop is a shortened version of my code
        for(int i=0; i<numProcesses;i++){
             readyQueue.push_back(aProcess);
         }
        std::sort(readyQueue.begin(), readyQueue.end());       
    }

http://en.cppreference.com/w/cpp/algorithm/sort

于 2012-11-08T00:40:16.067 に答える
3

operator<ほとんどの場合、クラスを定義する必要があります。

struct Process{
    int pid;
    int burst;
    int arrival;

    bool operator<(Process const &other) { return arrival < other.arrival; }
};

あなたがそれをしたら、うまくいきますstd::sort

std::sort(std::begin(readyQueue), std::end(readyQueue));
于 2012-11-08T00:40:47.380 に答える
0

カレンダーキューを実装する必要があります。queueそのためにデータ構造を使用しないでくださいが、 set

struct Process{
    int pid;
    int burst;
    int arrival;
    bool operator<(Process const& other) const {
      if (arrival == other.arrival) {
        if (pid == other.pid)
          return this < &other;
        return pid < other.pid;
      }
      return arrival < other.arrival;
    }
};

void func() {
  std::set<Process> myQueue;
}

明示的にソートする必要はありません。セットはコンテンツを常にソートしたままにしerasebegin()イテレータを使用することでいつでも最初のコンテンツを削除できます。

于 2012-11-08T00:45:55.023 に答える
0

代わりに使用する必要がありstd::priority_queueます...そうしないと、何かをプッシュするたびにキューをソートする必要があります。

まだ定義する必要があることに注意してくださいoperator<

于 2012-11-08T00:43:59.540 に答える