我有一个 C++ 程序,可以组织我想修的一系列大学类(class)。它通过从控制台获取输入(包括类(class)代码、描述等内容),按专业组织每门类(class),然后将其全部输出到一个格式良好、易于阅读的 HTML 文件来实现。稍后,我计划通过大量研究来精简列表。
我将每门类(class)实现为一个对象,当我输入完信息后,它会添加到列表中。当我完成所有信息后,list::sort
应该按专业和代码对每门类(class)进行排序(例如,CSE 380 在 CSE 110 之后,并且两者都在 ECO 108 之前)。之后的格式化很容易。
为了排序,我必须实现一个简单的函数,因为即使不这样做在技术上是有效的,我也会收到一个奇怪的错误,我猜是因为我的 Course 类没有“<”运算符。我的函数看起来像这样;
bool courseCompare(Course course1, Course course2) { return course1.getCode() < course2.getCode(); }
getCode()
返回一个小字符串,其中包含三字母/数字格式的类(class)代码(如“AMS 401”)。显然,这是为了便于按字母顺序排列。
我这样调用sort方法;
all_the_courses.sort(courseCompare);
all_the_courses
是一个列表。
但是,每当我使用 std::list 时,程序就会停止。不崩溃,不提供任何输出,当我输入任何内容并按 Enter 时,只是坐在那里没有响应。有什么想法吗?
最佳答案
您是按值而不是引用将参数传递给比较函数,因此错误可能出在您的复制构造函数中。编写比较函数的常用方法是使用 const 引用,这样可以避免完全复制对象:
bool courseCompare(const Course &course1, const Course &course2)
关于c++ - 使用 std::list::sort 挂起我的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691516/