Проблема заключается в том, что оператор PageMeta меньше (<), который используется std :: set для упорядочения элементов при их вставке и для сравнения при поиске элемента. Неправильно сравнивать члены pageNum и freeSpace во всех случаях. Вот почему он находит соответствие для PageMeta (2, 100), когда такой записи в наборе нет. </p>
Должно ли сначала сравниваться pageNum? Если и только если pageNum не совпадает, следует ли сравнивать freeSpace? Затем я предлагаю изменить код следующим образом:
bool operator<(const PageMeta& pm) const {
return pageNum < pm.pageNum || (pageNum == pm.pageNum && freeSpace < pm.freeSpace);
}
Все зависит от порядка, который вы хотите наложить. Имеет ли pageNum приоритет над свободным пространством или наоборот? Вы должны решить и изменить свой оператор <, чтобы сделать сравнение правильно. Проверьте логику сравнения элементов и порядок их сравнения. </p>