欢迎,我有课
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
变体。
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 ); } );
使用内部运算<
符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”字段必须是公开的。