Функция replacePage
, например, определяется как:
void replacePage(int loc, int page, int time, map<int, pageAndTimestamp> m)
Эта функция принимает карту как значение , а не как ссылку или указатель.Таким образом, когда вы вызываете его следующим образом:
replacePage(loc, pagestream[time], time, frames);
, тогда карта frames
копируется в переменную m
в вашей функции.Вот почему, например, отладчик переносит вас в конструктор копирования для карты.
Кроме того, это означает, что код replacePage
m.at(loc).a[0] = page;
m.at(loc).a[1] = time;
вносит изменения в копию из frames
, а не frames
.
Возможно, вам нужны функции с сигнатурами вида:
bool pageLoaded(int page, const map<int, pageAndTimestamp>& m)
int findPageToReplace(const map<int, pageAndTimestamp>& m)
void replacePage(int loc, int page, int time, map<int, pageAndTimestamp>& m)
void output(int t, int p, double s, double h, const map<int, pageAndTimestamp>& m)
, в которых большинство функций принимают постоянную ссылку, тогда как replacePage
требует (неконстантную) ссылку.