我希望有一个stl list
个对象,其中每个对象包含两个int
。
之后我想在第一个int
的值之后用stl :: sort对列表进行排序。
如何告诉sort函数它应该在第一个int
之后排序?
答案 0 :(得分:29)
您可以指定自定义排序谓词。在C ++ 11中,最好使用lambda:
typedef std::pair<int, int> ipair;
std::list<ipair> thelist;
thelist.sort([](const ipair & a, const ipair & b) { return a.first < b.first; });
在旧版本的C ++中,您必须编写适当的函数:
bool compFirst(const ipair & a, const ipair & b) { return a.first < b.first; }
thelist.sort(compFirst);
(相反,如果ipair
您当然可以拥有自己的数据结构;只需相应地修改比较函数即可访问相关数据成员。)
最后,如果这有意义,您还可以为自定义类配备operator<
。这允许您在任何有序的上下文中自由使用该类,但一定要了解其后果。
答案 1 :(得分:3)
std :: list :: sort has a one-argument form,第一个参数是比较函数。
答案 2 :(得分:1)
您可以这样做:
typedef std::pair<int,int>;
list<my_type> test_list;
bool my_compare (my_type a, my_type b)
{
return a.first < b.first;
}
test_list.sort(my_compare);
如果类型是结构或类,它将工作如下:
struct some_struct{
int first;
int second;
};
list<some_struct> test_list;
bool my_compare (const some_struct& a,const some_struct& b)
{
return a.first < b.first;
}
test_list.sort(my_compare);
或者您可以为结构定义operator <
,然后只需调用test_list.sort()