@@ -55,19 +55,18 @@ void roundRobin(){
55
55
}
56
56
57
57
void shortestProcessNext (){
58
- priority_queue<pair<int ,string >,vector<pair<int ,string >>,greater<pair<int ,string >>>pq;
58
+ priority_queue<pair<int ,int >,vector<pair<int ,int >>,greater<pair<int ,int >>>pq; // pair of service time and index
59
59
int j=0 ;
60
60
for (int i=0 ;i<last_instant;i++){
61
61
for (;j<process_count;){
62
62
if (getArrivalTime (processes[j])<=i){
63
- pq.push (make_pair (getServiceTime (processes[j]),getProcessName (processes[j]) ));
63
+ pq.push (make_pair (getServiceTime (processes[j]),j ));
64
64
j++;
65
65
}else
66
66
break ;
67
67
}
68
68
if (!pq.empty ()){
69
- string processName = pq.top ().second ;
70
- int processIndex = processToIndex[processName];
69
+ int processIndex = pq.top ().second ;
71
70
int arrivalTime = getArrivalTime (processes[processIndex]);
72
71
int serviceTime = getServiceTime (processes[processIndex]);
73
72
pq.pop ();
@@ -89,30 +88,30 @@ void shortestProcessNext(){
89
88
}
90
89
91
90
void shortestRemainingTime (){
92
- priority_queue<pair<int ,string >,vector<pair<int ,string >>,greater<pair<int ,string >>>pq;
91
+ priority_queue<pair<int ,int >,vector<pair<int ,int >>,greater<pair<int ,int >>>pq;
93
92
int j=0 ;
94
93
for (int i=0 ;i<last_instant;i++){
95
94
for (;j<process_count;){
96
95
if (getArrivalTime (processes[j])==i){
97
- pq.push (make_pair (getServiceTime (processes[j]),getProcessName (processes[j]) ));
96
+ pq.push (make_pair (getServiceTime (processes[j]),j ));
98
97
j++;
99
98
}else
100
99
break ;
101
100
}
102
101
if (!pq.empty ()){
103
- string processName = pq.top ().second ;
102
+ int processIndex = pq.top ().second ;
104
103
int remainingTime = pq.top ().first ;
105
104
pq.pop ();
106
- int processIndex = processToIndex[processName];
107
105
int serviceTime = getServiceTime (processes[processIndex]);
108
106
int arrivalTime= getArrivalTime (processes[processIndex]);
109
107
timeline[i][processIndex]= ' *' ;
108
+
110
109
if (remainingTime==1 ){// process finished
111
110
finishTime[processIndex]= i+1 ;
112
111
turnAroundTime[processIndex]= (finishTime[processIndex]-arrivalTime);
113
112
normTurn[processIndex]= (turnAroundTime[processIndex]*1.0 /serviceTime);
114
113
}else {
115
- pq.push (make_pair (remainingTime-1 ,processName ));
114
+ pq.push (make_pair (remainingTime-1 ,processIndex ));
116
115
}
117
116
}
118
117
}
0 commit comments