C ++ list ::成员的类排序

时间:2015-01-14 17:56:18

标签: c++ list sorting categories member

如何按特定成员变量对类列表进行排序?

class Klasse {
  int _a;
  int _b;

}

...
list<Klasse> liste;
liste.sort();   // sorts by _a
liste.sort(?);  // how to sort by _b now?

5 个答案:

答案 0 :(得分:4)

您将使用comparator object。以下是使用lambda

的示例
std::list<Klasse> liste;
liste.sort([](Klasse const & lhs, Klasse const & rhs) {
    return lhs._b < rhs._b;
});

答案 1 :(得分:3)

See the reference.

您可以编写一个比较函数 - 基本上可以使用列表的元素类型的两个参数调用的任何函数,并且此调用返回可转换为bool的值。这样的“任何东西”可以是lambda,函数对象,或者只是一个函数:

bool klasse_sort_by_b(const Klasse& l, const Klasse& r)
{
    return l._b < r._b;
}

liste.sort(klasse_sort_by_b);

答案 2 :(得分:1)

你需要这种排序实现:

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);

答案 3 :(得分:0)

http://www.cplusplus.com/reference/list/list/sort/

您应该在链接中编写自己的比较器,示例和用法;)

这是承诺的代码示例

(感谢建设性的批评)

 bool compare_by_b (const Klasse& first, const Klasse& second)
    {
      return first._b < second._b ;
    }

 liste.sort(compare_by_b);

答案 4 :(得分:-1)

是的,您所要做的就是实现比较器类,或重载比较Klasse::operator<运算符。有关sort方法的参考,请参阅this