使用std::list::sort会挂起我的程序



我有一个用c++编写的程序,里面有我想学的一些大学课程。它通过从控制台获取输入(包括课程代码、描述等),按专业组织每门课程,然后将其全部输出到格式良好、易于阅读的HTML文件中来实现这一点。之后,我计划通过大量的研究来细化列表。

我将每个课程实现为一个对象,当我输入完信息后,它被添加到一个列表中。当我完成所有信息后,list::sort应该按专业和代码对每门课程进行排序(例如,CSE 380在CSE 110之后,都在ECO 108之前)。之后的格式化很容易。

要排序,我必须实现一个简单的函数,因为即使不这样做在技术上是有效的,我也会得到一个奇怪的错误,我猜是因为我的Course类没有'<'操作符。我的函数是这样的;

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

其中getCode()返回一个小字符串,其中包含三个字母/数字格式的课程代码(如"AMS 401")。显然,这是为了方便字母顺序。

我这样调用sort方法;

all_the_courses.sort(courseCompare);

其中all_the_courses为列表。

然而,只要我使用std::list,程序就会停止。不会崩溃,没有输出,只是坐在那里,当我输入任何东西并按Enter时没有响应。什么好主意吗?

将参数按值传递给比较函数,而不是按引用传递,因此错误可能存在于复制构造函数中。编写比较函数的通常方法是使用const引用,这样可以避免完全复制对象:

bool courseCompare(const Course &course1, const Course &course2)

好吧,看来我用的是完全错误的方法。事实证明,我的问题完全不同(涉及文件流)。我需要弄清楚它是什么,但它不是排序;一个简单的cout(我以前真的应该使用)揭示了这一点。对不起,每个人!

最新更新