使用 #include 按<algorithm>字符串数据成员对类对象的向量进行排序
Using #include <algorithm> to sort a vector of class objects by a string data member
假设我有这个类:
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 以来一直受支持。
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 从多个源构造一个对象,包括一个对象向量
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 对象 C++ 向量的 STL 容器
- 初始化C++中的对象向量
- 从自定义类获取对象向量中的 max 元素
- 如何在 c++ 中打印存档中的对象向量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 尝试重载输出运算符时,我无法遍历对象向量
- 如何在C++中打印对象向量的内容
- 打印出对象向量中的每个元素C++
- 在 c++ 的构造函数中分配对象向量时出错
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 对象向量是否在堆或堆栈上分配C++?
- 基于不同字段的对象向量的排序功能
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 用rapidjson读取子对象向量
- 尝试使用比较运算符对对象向量进行排序
- 如何用对象向量重载 cin(>>)
- 如何将某个元素从shared_ptr擦除到对象向量?