如何在C++中对存储staff类对象的vector按ID排序并输出结果?
按ID排序
vector<staff>并输出的实现方案 嘿,这事儿很容易搞定,我给你两种常用的实现方式,你可以根据需求选:
1. 先补全staff类的基础定义
首先咱们得把staff类的结构补全,至少要有构造函数(方便快速初始化vector里的对象),以及一个辅助打印的函数:
#include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; class staff { public: int ID; string Name; string Class; // 构造函数,用于直接初始化staff对象 staff(int id, string name, string cls) : ID(id), Name(name), Class(cls) {} }; // 辅助函数:批量打印vector中所有staff的信息 void printStaff(const vector<staff>& s) { for (const auto& member : s) { cout << "ID: " << member.ID << ", Name: " << member.Name << ", Class: " << member.Class << endl; } }
2. 方法一:重载<运算符(适合固定按ID排序的场景)
如果你的程序里大部分排序需求都是按ID来,直接给staff类重载<运算符是最省心的——这样sort函数可以直接使用默认规则:
// 在staff类外部重载<运算符,指定按ID升序比较 bool operator<(const staff& a, const staff& b) { return a.ID < b.ID; // 要是需要降序排序,改成`a.ID > b.ID`即可 } int main() { vector<staff> s = { {234, "Mark", "biology"}, {3455, "Mitch", "English"}, {1234, "Hen", "Maths"} }; cout << "排序前:" << endl; printStaff(s); // 直接调用sort,默认用重载的<运算符做比较 sort(s.begin(), s.end()); cout << "\n排序后:" << endl; printStaff(s); return 0; }
3. 方法二:用Lambda表达式(灵活适配临时排序需求)
如果只是这次需要按ID排序,后续可能要切换其他字段排序,用Lambda表达式传给sort会更灵活,不用修改类的定义:
int main() { vector<staff> s = { {234, "Mark", "biology"}, {3455, "Mitch", "English"}, {1234, "Hen", "Maths"} }; cout << "排序前:" << endl; printStaff(s); // 用Lambda表达式直接指定排序规则:按ID升序 sort(s.begin(), s.end(), [](const staff& a, const staff& b) { return a.ID < b.ID; // 降序的话改成`a.ID > b.ID` }); cout << "\n排序后:" << endl; printStaff(s); return 0; }
最终输出结果
不管用哪种方法,运行后都会得到如下输出:
排序前: ID: 234, Name: Mark, Class: biology ID: 3455, Name: Mitch, Class: English ID: 1234, Name: Hen, Class: Maths 排序后: ID: 234, Name: Mark, Class: biology ID: 1234, Name: Hen, Class: Maths ID: 3455, Name: Mitch, Class: English
内容的提问来源于stack exchange,提问作者ibrahimovich
相关产品推荐
相关产品推荐

