#include #include "deque.h" #include using namespace std; //constantes pour définir l'étendue des priorités - plus propre que de mettre des 1 et 10 dans le code const int MIN_PRIOR = 1; const int MAX_PRIOR = 10; enum TypeEvenement { ADD_REQUEST, PROCESS_NEXT }; //dans une struct, tout est public struct Evenement { TypeEvenement type; //si type == ADD_REQUEST, id = identifiant de la requête, priorite = doit être entre MIN_PRIOR et MAX_PRIOR // (vous n'avez pas à vérifier la condition sur priorite) //si type == PROCESS_NEXT, ces deux variables n'ont pas de valeur définie int id; int priorite; //ci-bas une syntaxe qui initialise les variables membres avec type = PROCESS_NEXT, id = 0, priorite = 0 Evenement() : type(PROCESS_NEXT), id(0), priorite(0) {} Evenement(TypeEvenement type, int id = 0, int p = 0){ this->type = type; this->id = id; this->priorite = p; } }; vector get_histo(vector& events) { //Note : vous pouvez tester le type d'événement en le comparant avec l'enum, par exemple //Evenement& ev = events[0]; //if (ev.type == PROCESS_NEXT) // ... //else if (ev.type == ADD_REQUEST) // ... vector ordre; //reqs[i] = deque des id de requêtes avec priorité i vector< deque > reqs(MAX_PRIOR + 1); for (auto it = events.begin(); it != events.end(); ++it) { Evenement& ev = *it; if (ev.type == ADD_REQUEST) { reqs[ev.priorite].push_back(ev.id); } else { //trouver prochaine tache prioritaire et l'enlever for (int i = MIN_PRIOR; i <= MAX_PRIOR; ++i) { if (!reqs[i].empty()) { ordre.push_back(reqs[i].front()); reqs[i].pop_front(); break; //sortir du for } } } } return ordre; } void test_histo() { vector events; events.push_back(Evenement(ADD_REQUEST, 1, 5)); events.push_back(Evenement(ADD_REQUEST, 2, 5)); events.push_back(Evenement(ADD_REQUEST, 3, 1)); events.push_back(Evenement(PROCESS_NEXT)); events.push_back(Evenement(ADD_REQUEST, 4, 10)); events.push_back(Evenement(PROCESS_NEXT)); events.push_back(Evenement(ADD_REQUEST, 5, 4)); events.push_back(Evenement(ADD_REQUEST, 6, 2)); events.push_back(Evenement(ADD_REQUEST, 7, 4)); events.push_back(Evenement(PROCESS_NEXT)); events.push_back(Evenement(PROCESS_NEXT)); events.push_back(Evenement(PROCESS_NEXT)); vector ordre = get_histo(events); cout << "Ordre = "; for (auto it = ordre.begin(); it != ordre.end(); ++it) { cout << *it << " "; } cout << endl; } int main() { deque d; d.push_back(0); cout< nullptr partout)"<