c++ - 使用 std::list::sort 挂起我的程序

标签 c++ stdlist

我有一个 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/

相关文章:

c++ - C++ 中的数组声明、大小定义和销毁

c++ - 使用 std::list 时内存泄漏

c++ - 为什么这个 C++ 程序会出现段错误?

c++ - cocos2d-x 中正确的实例化和内存管理

c++ - 通过迭代器获取集合元素的 "index"

c++ - 在 C++ 中使用 CLang

c++ - 结构节点与 std::list< >

c++ - 在 C++ 中拆分和合并 std::list

c++ - 迭代继承类 C++ 的列表

java - 使用 JNI 将 Java 与 C++ 静态链接