c++ - 如何在 C++ 中对包含类对象的向量进行排序?
问题描述
class(staff) 包含对象 int ID, string Name, string Class 向量包含
vector <staff> s = { {234, "Mark", "biology"},
{3455, "Mitch", "English"},
{1234, "Hen", "Maths"}}
如何从 ID 中排序?并打印排序?谢谢
解决方案
STL 提供std::sort
对容器进行分类的功能(有关更多信息,请参见此处)。它利用 对operator<
容器内的元素进行排序,您可以在其中指定用于排序的元素。
调用std::sort
容器后排序,您可以通过迭代它来打印它。
这是一个快速而完整的示例:
#include <iostream>
#include <vector>
#include <algorithm>
class staff {
public:
explicit staff(const uint32_t id, const std::string& name,
const std::string& class_type)
: id_(id), name_(name), class_(class_type) {}
bool operator<(const staff& other) {
return id_ < other.id_; // sort by id
}
void print() const {
std::cout << "ID: " << id_
<< ", name: " << name_
<< ", class: " << class_ << "\n";
}
private:
uint32_t id_;
std::string name_;
std::string class_;
};
static void print_staffs(const std::vector<staff>& staffs) {
for (const staff& staff : staffs) {
staff.print();
}
std::cout << "----------\n";
}
int main()
{
std::vector<staff> staffs = { staff(234, "Mark", "biology"),
staff(3455, "Mitch", "English"),
staff(1234, "Hen", "Maths") };
print_staffs(staffs); // print unsorted
std::sort(staffs.begin(), staffs.end()); // sort
print_staffs(staffs); // print sorted
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
推荐阅读
- git - 新功能分支中的 Git 未跟踪文件
- python - 当我传入相同的数据时,为什么我在 sparse_categorical_accuracy 和 val_sparse_categorical_accuracy 上得到不同的准确度
- go - 发射所有goroutine后如何使用goroutine按顺序打印数字
- node.js - 初始化 DynamoDB 实例(Lambda + NodeJS)的最佳位置是什么?
- html - HTMLFile COM 对象 (IHTMLDocument2) 有时会在 Edge 模式下中断
- scala - sbt 中的顺序测试设置/清理
- python - 为什么我的递归函数不起作用,为什么我会得到奇怪的结果
- shell - 如何从命令行 (macOS) 连接到 JDBC 数据库 (Filemaker)?
- python-3.x - 通过 QPushButton 问题恢复导入的字典
- c# - ASP.MVC System.InvalidOperationException 的问题