#include #include #include #include #include #include #include

using namespace std;

class Dog { public: Dog(string na, int age = 0) { m_name = na; m_age = age; } // bool operator >() void show() { cout << 'dog ' << m_name << ' age = ' << m_age << endl; } private: string m_name; int m_age; friend bool cmp_name(const Dog &dg1, const Dog &dg2); };

bool cmp_name(const Dog &dg1, const Dog &dg2) { return dg1.m_name < dg2.m_name; }

int main() { list lst; Dog wc('wc', 1); Dog ah('ah', 5); Dog lf('lf', 2); Dog xhh('xhh', 4); lst.push_back(wc); lst.push_front(ah); lst.push_front(lf); lst.push_front(xhh); list::iterator iter = lst.begin(); lst.sort(cmp_name); for(iter = lst.begin(); iter != lst.end(); iter++) { // (*iter).show(); iter->show(); } return 0; }

// 解释每一行内容:

// 1. #include <iostream>: 包含输入输出流库,可以使用输入输出操作。 // 2. #include <vector>: 包含向量库,可以使用向量数据结构。 // 3. #include <stack>: 包含栈库,可以使用栈数据结构。 // 4. #include <queue>: 包含队列库,可以使用队列数据结构。 // 5. #include <list>: 包含链表库,可以使用链表数据结构。 // 6. #include <map>: 包含映射库,可以使用映射数据结构。 // 7. #include <algorithm>: 包含算法库,可以使用算法函数。 // 9. using namespace std;: 使用标准命名空间,避免使用std::前缀。 // 11. class Dog: 定义一个类Dog。 // 13. Dog(string na, int age = 0): 类Dog的构造函数,用于创建一个Dog对象。接受一个字符串参数na和一个整数参数ageage默认为0。 // 17. void show(): 类Dog的成员函数,用于显示Dog对象的信息。 // 19. private:: 类Dog的私有成员变量。 // 20. string m_name;: 类Dog的私有成员变量,表示狗的名字。 // 21. int m_age;: 类Dog的私有成员变量,表示狗的年龄。 // 22. friend bool cmp_name(const Dog &dg1, const Dog &dg2);: 申明一个友元函数cmp_name,用于比较两个Dog对象的名字大小。 // 24. bool cmp_name(const Dog &dg1, const Dog &dg2): 定义一个全局函数cmp_name,用于比较两个Dog对象的名字大小。 // 28. list<Dog> lst;: 创建一个Dog对象的链表。 // 29. Dog wc('wc', 1);: 创建一个名为wc,年龄为1的Dog对象。 // 30. Dog ah('ah', 5);: 创建一个名为ah,年龄为5的Dog对象。 // 31. Dog lf('lf', 2);: 创建一个名为lf,年龄为2的Dog对象。 // 32. Dog xhh('xhh', 4);: 创建一个名为xhh,年龄为4的Dog对象。 // 33. lst.push_back(wc);: 在链表末尾插入wc对象。 // 34. lst.push_front(ah);: 在链表头部插入ah对象。 // 35. lst.push_front(lf);: 在链表头部插入lf对象。 // 36. lst.push_front(xhh);: 在链表头部插入xhh对象。 // 37. list<Dog>::iterator iter = lst.begin();: 创建一个链表迭代器iter,并将其指向链表的起始位置。 // 38. lst.sort(cmp_name);: 使用cmp_name函数对链表进行排序。 // 39. for(iter = lst.begin(); iter != lst.end(); iter++) {: 循环遍历链表中的每个元素。 // 40. iter->show();: 调用show函数显示当前元素的信息。 // 43. return 0;: 程序正常结束,返回0。

C++ 链表排序:使用自定义类和比较函数

原文地址: http://www.cveoy.top/t/topic/quuY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录