c++ - 如何通过其不同的属性对对象的类(不是结构)进行排序?
问题描述
编辑这里是我的代码:
class Book{
private:
int Serialnumber;
string Author; // I also have getters and setters for them
}
class Library{
vector<Book> inventory; // I added some books in the vector Inventory
}
我还有两个类的 2 个头文件和 2 个 .cpp 文件。在每个 .cpp 文件中包含两个标头,并在每个 .cpp 文件中声明两个类,以便我可以访问它们。我现在需要对我的 vector<> 库存进行排序。我需要 2 个函数,一个用于按序列号对它们进行排序,另一个用于按作者姓名对它们进行排序。
解决方案
在 C++ 中,类和结构之间没有显着差异。基本上,所有区别都在于程序员的感知和默认访问权限,因此您可以简单地通过函数std::sort对它们进行排序并为其编写 2 个不同的比较器
所以我的实现看起来像这样(注意:您可以轻松地将类替换为结构)
class book //your custom class
{
private:
string author;
int pages;
public:
book(const string &str, int num): author(str), pages(num) {}
friend bool pages_compare(const book& lhs, const book& rhs); //friend comparator. If your fields are public, you may remove "friendship"
friend bool author_compare(const book& lhs, const book& rhs);//friend comparator. If your fields are public, you may remove "friendship"
friend void print(const book& arg);
};
bool pages_compare(const book& lhs, const book& rhs) // func for sorting by pages count
{
return lhs.pages < rhs.pages;
}
bool author_compare(const book& lhs, const book& rhs) // func for sorting by author name
{
return lhs.author < rhs.author;
}
void print(const book& arg) // custom printing
{
cout << '{' << arg.author << ", " << arg.pages << "} ";
}
int main()
{
book book0{"aurelius", 10};
book book1{"bbbbbb", 5};
book book2{"ccccc", 15};
book book3{"au", 100};
vector<book> arr = {book0, book1, book2, book3};
sort(arr.begin(), arr.end(), pages_compare); // sort by page count
for(auto &i: arr) // print
print(i); // {bbbbbb, 5} {aurelius, 10} {ccccc, 15} {au, 100}
cout << '\n';
sort(arr.begin(), arr.end(), author_compare); // sort by author name
for(auto &i: arr) // print
print(i); // {au, 100} {aurelius, 10} {bbbbbb, 5} {ccccc, 15}
}
推荐阅读
- javascript - $lookup 数组在 mongdb v3.2 中不起作用
- linux - 获取 docker 容器内可用的 cpu 资源数量
- json - Swift:HTTP 加载失败(错误代码:100)
- javascript - 在 MS Edge 中打开时不处理 URL 参数
- java - Collections.reverse() 时间复杂度
- flask - 基于 grunt 的工作流的 Flask 项目结构
- url - 使用 Zapier Push 从 URL 中提取 Salesforce 记录 ID
- javascript - 如何在 2 个空格后将名称分成两部分?
- java - 在图像 javaFx 上画一条线
- python - 不可迭代的python(循环中分配变量的不同整数值并将它们合二为一)