使用 #include 按<algorithm>字符串数据成员对类对象的向量进行排序

Using #include <algorithm> to sort a vector of class objects by a string data member

本文关键字:对象 向量 排序 字符串 #include lt algorithm 使用 gt 数据成员      更新时间:2023-10-16

假设我有这个类:

class cat
{
private:
int age;
string name;
public:
cat();
~cat();
void set_age(int a) { age = a; }
void set_name(string n) { name = n; } 
int get_age() { return age; }
string get_name() { return name; }
}

我有一个未排序的向量,其中包含称为vector<cat> cats或其他东西的类cat对象。如何使用算法 STL 按名称对它们进行排序?

该函数实现"小于"排序。它接受两个任意元素,并返回两个元素中较小的一个。容器的内部算法使用它来创建排序。

我不得不说,这在std::sort的文档中说得很清楚:

comp:比较函数对象(即满足 Compare 要求的对象),如果第一个参数小于(即在第二个参数之前排序),则返回​true

比较函数的签名应等效于以下内容:

bool cmp(const Type1 &a, const Type2 &b);

所以我不确定你在挣扎什么?你没说。

更新:现在您已将问题从如何按年龄排序更改为如何按名称排序......我假设您可以调整下面的代码。

它可以像

std::sort(std::begin(cats), std::end(cats),
[](const cat& x, const cat& y)
{ return x.get_age() < y.get_age(); });

但是,如果 - 就像在现实世界中一样 - 猫可能具有相同的年龄 - 依靠其他标准来确定哪个"更少" - 在您的情况下,唯一的选择是name,所以:

std::sort(std::begin(cats), std::end(cats),
[](const cat& x, const cat& y)
{ return x.get_age() < y.get_age() ||
x.get_age() == y.get_age() && x.get_name() < y.get_name(); });

第三个参数是排序函数,它表示第一个参数 - 高于x- 是否小于第二个参数 -y。 我使用了内联 lambda 函数,该函数自 C++11 以来一直受支持。