-2

欢迎,我有课

Class test{
   string a;
   string b;
}

主要是

vector<test> t;

以及如何按归档排序?排序 ASC 和 DESC?我不知道怎么做这个排序

4

4 回答 4

8

与自定义比较器一起使用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变体。

于 2013-10-18T08:55:31.987 回答
3

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

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

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 ); } );
于 2013-10-18T09:01:42.883 回答
1

使用内部运算<class test

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

   //..

};

然后,

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

于 2013-10-18T08:56:03.450 回答
0

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

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”字段必须是公开的。

于 2013-10-18T09:24:28.540 回答