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

时间:2015-05-08 03:01:01

标签: c++ algorithm stl

假设我有这门课程:

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按名称对它们进行排序?

2 个答案:

答案 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以来一直支持它。