C++类向量和按归档排序

C++ Vector of Class and sorting by filed

本文关键字:排序 向量 C++      更新时间:2023-10-16

欢迎,我有课

Class test{
   string a;
   string b;
}

在主

vector<test> t;

以及如何按归档排序? 对 ASC 和 DESC 进行排序?我不知道这是怎么做到的

std::sort与自定义比较器一起使用:

bool less_by_a(const test& lhs, const test& rhs)
{
  return lhs.a < rhs.a;
}

然后

#include <algorithm>
...
std::sort(t.begin(), t.end(), less_by_a);

同样,对于大于a变体。

有标准的算法 std::sort in C++。它可以接受指定排序顺序的谓词。

因此,要按升序对向量进行排序,您可以编写

std::sort( t.begin(), t.end(), []( const test &t1, const test &t2 ) { return ( t1.a < t2.a ); } );

前提是数据成员 A 具有公共访问控制(在您的示例中,它具有私有访问控制)。

要按降序对向量进行排序,您只需反转条件即可

std::sort( t.begin(), t.end(), []( const test &t1, const test &t2 ) { return ( t2.a < t1.a ); } );

class test使用内部运算符<

class test {
    //..
    string a;
    strint b;
    //...
    bool operator<(const test& t) const  
    {
        return a < t.a;
    }
   //..
};

然后

std::sort(t.begin(),t.end());

你可以像这样写一个通用比较器:

template <typename T, typename S, template <typename> class L>
struct compare : public std::binary_function <const S &, const S &, bool> {
    compare (T typename S::* f) : f (f) { }
    bool operator () (const S & lhs, const S & rhs) const {
        return L <T> ().operator () (lhs.*f, rhs.*f);
    }
private:
    T typename S::* f;
};
template <template <typename> class L, typename T, typename S>
compare <T, S, L> make_compare (T typename S::* f) {
    return compare <T, S, L> (f);
}

然后使用它:

std::sort (t.begin (), t.end (), make_compare <std::less> (& test::a));

但是"test::a"字段必须是公开的。