成员 类 的 C++ list::sort
C++ list::sort of classes by members
如何按某个成员变量对 类 的列表进行排序?
class Klasse {
int _a;
int _b;
}
...
list<Klasse> liste;
liste.sort(); // sorts by _a
liste.sort(?); // how to sort by _b now?
是的,您所要做的就是实现一个比较器 class,或者重载比较器 Klasse::operator<
运算符。有关 sort
方法的参考,请参阅 this。
你会使用 comparator object. Here's an example using a lambda.
std::list<Klasse> liste;
liste.sort([](Klasse const & lhs, Klasse const & rhs) {
return lhs._b < rhs._b;
});
http://www.cplusplus.com/reference/list/list/sort/
您应该在 link 中编写自己的比较器、示例和用法 ;)
这是承诺的代码示例
(感谢建设性的批评)
bool compare_by_b (const Klasse& first, const Klasse& second)
{
return first._b < second._b ;
}
liste.sort(compare_by_b);
您可以编写一个比较函数 - 基本上可以使用列表元素类型的两个参数调用的任何东西,并且此调用 returns 值可转换为 bool
。这样的 "anything" 可以是 lambda、函数对象,或者只是一个函数:
bool klasse_sort_by_b(const Klasse& l, const Klasse& r)
{
return l._b < r._b;
}
liste.sort(klasse_sort_by_b);
您需要这个排序实现:
template<typename Compare>
void sort (Compare comp);
然后传递一个比较函数,如:
bool compareByA( const Klasse& first, const Klasse& second ){
return first._a < second._a;
}
然后调用它:
std::list<Klasse> lst;
...
lst.sort(compareByA);
lst.sort(compareByB);
如何按某个成员变量对 类 的列表进行排序?
class Klasse {
int _a;
int _b;
}
...
list<Klasse> liste;
liste.sort(); // sorts by _a
liste.sort(?); // how to sort by _b now?
是的,您所要做的就是实现一个比较器 class,或者重载比较器 Klasse::operator<
运算符。有关 sort
方法的参考,请参阅 this。
你会使用 comparator object. Here's an example using a lambda.
std::list<Klasse> liste;
liste.sort([](Klasse const & lhs, Klasse const & rhs) {
return lhs._b < rhs._b;
});
http://www.cplusplus.com/reference/list/list/sort/
您应该在 link 中编写自己的比较器、示例和用法 ;)
这是承诺的代码示例
(感谢建设性的批评)
bool compare_by_b (const Klasse& first, const Klasse& second)
{
return first._b < second._b ;
}
liste.sort(compare_by_b);
您可以编写一个比较函数 - 基本上可以使用列表元素类型的两个参数调用的任何东西,并且此调用 returns 值可转换为 bool
。这样的 "anything" 可以是 lambda、函数对象,或者只是一个函数:
bool klasse_sort_by_b(const Klasse& l, const Klasse& r)
{
return l._b < r._b;
}
liste.sort(klasse_sort_by_b);
您需要这个排序实现:
template<typename Compare>
void sort (Compare comp);
然后传递一个比较函数,如:
bool compareByA( const Klasse& first, const Klasse& second ){
return first._a < second._a;
}
然后调用它:
std::list<Klasse> lst;
...
lst.sort(compareByA);
lst.sort(compareByB);