假设我有这门课程:
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; }
}
我有一个未分类的向量,其中包含cat
类的对象vector<cat> cats
或其他东西。我如何使用算法STL按名称对它们进行排序?
答案 0 :(得分:0)
该函数实现了“小于”的排序。它需要两个任意元素,并返回哪一个是两者中较小的一个。容器的内部算法使用它来创建排序。
我不得不说,std::sort
's documentation明确表达了这一点:
comp:比较函数对象(即满足Compare要求的对象),如果第一个参数 less ,则返回
Router.prototype.findFirstRoute = function (url) { var isMatch; var routeHandler; for (var i = 0; i < this.routes.length; i++) { route = this.routes[i]; // only matches if the url matches AND the // current environment matches. isMatch = route.handler.test(url, { where: Meteor.isServer ? 'server' : 'client' }); if (isMatch) return route; } return null; };
(即在之前命令)第二个。比较函数的签名应等同于以下内容:
true
所以我不确定你在挣扎什么?你没说。
答案 1 :(得分:0)
更新:现在你已经改变了如何按年龄排序到如何按名称排序的问题......我假设你可以调整下面的代码。
可以像
一样简单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以来一直支持它。