Использование std :: list :: sort вешает мою программу - PullRequest
0 голосов
/ 01 января 2012

У меня есть программа на C ++, которая организует несколько курсов колледжа, которые я хочу пройти. Это делается путем ввода данных из консоли (с такими вещами, как код курса, описание и т. Д.), Организации каждого курса по основным направлениям и последующего вывода всего этого в хорошо отформатированный, легко читаемый HTML-файл. Позже я планирую прореживать список с помощью множества исследований.

Я реализую каждый курс как объект, который добавляется в список, когда я заканчиваю ввод информации. Когда я закончу со всей информацией, list::sort должен отсортировать каждый курс по основным и кодам (например, CSE 380 идет после CSE 110, а оба - до ECO 108). Форматирование потом легко.

Для сортировки мне нужно реализовать простую функцию, потому что, хотя это не является технически обоснованным, я получаю странную ошибку, я полагаю, из-за отсутствия оператора «<» для моего класса Course. Моя функция выглядит так: </p>

bool courseCompare(Course course1, Course course2) { return course1.getCode() < course2.getCode(); }

Где getCode() возвращает небольшую строку, содержащую код курса в трехбуквенном / цифровом формате (например, «AMS 401»). Очевидно, это должно облегчить алфавитный порядок.

Я вызываю метод сортировки следующим образом;

all_the_courses.sort(courseCompare);

Где all_the_courses - список.

Однако, когда бы я ни использовал std :: list, программа просто останавливается. Не вылетает, ничего не выводит, просто сидит и не отвечает, когда я что-то ввожу и нажимаю Enter. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 01 января 2012

Вы передаете параметры в функцию сравнения по значению, а не по ссылке, поэтому возможно, что ошибка находится в вашем конструкторе копирования.Обычный способ написания функции сравнения - с использованием константных ссылок, которые полностью исключают копирование объекта:

bool courseCompare(const Course &course1, const Course &course2)
1 голос
/ 02 января 2012

ОК, похоже, я поступил совершенно неправильно.Оказывается, моя проблема в чем-то совершенно ином (включая файловые потоки).Мне нужно выяснить, что это такое, но это НЕ сортировка;простой cout (который я действительно должен был использовать раньше) показывает это.Извините, все!

...