我想要一个stl list
的对象,其中每个对象包含两个int
's。 之后,我想在第一个int
的值之后用stl :: sort对列表进行排序。 如何告诉排序功能它应该在第一个int
之后排序?排序自定义类型的列表
回答
您可以指定自定义排序谓词。
typedef std::pair<int, int> ipair;
std::list<ipair> thelist;
thelist.sort([](const ipair & a, const ipair & b) { return a.first < b.first; });
在老版本的C++,你必须写一个适当的功能:在C++ 11,这是最好用的λ完成
bool compFirst(const ipair & a, const ipair & b) { return a.first < b.first; }
thelist.sort(compFirst);
(相反,如果ipair
当然你也可以有你自己的数据结构;只需修改比较函数即可访问相关数据成员。)
最后,如果这样做有道理,也可以使用operator<
装备您的自定义类。这使您可以在任何有序的环境中自由使用该类,但一定要理解其后果。
std :: list :: sort has a one-argument form,第一个参数是比较函数。
'std :: sort'也不能在'std :: list's ... :-( –
@KerrekSB:谢谢。有一天我会追捕那个决定std :: sort不能的人只是专门用于列表迭代器,但必须被合并到类中 – thiton
不要,它没有意义列表排序是完全不同的,并且与迭代器无关标准排序通过*交换值* ,而列表排序利用了容器的本性,并且只是重新绑定了元素节点。注意,列表排序不会*接受迭代器对! –
你可以做这样的事情:
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()
- 1. 列表自定义排序
- 2. 自定义排序列表
- 3. 自定义列表排序
- 4. 排序列表包含自定义类型添加
- 5. R中自定义类的元素列表的排序列表?
- 6. GraphQL排序自定义类型
- 7. 元组列表的自定义排序
- 8. LINQ - 排序的自定义列表
- 9. 类定义自定义排序顺序
- 10. 多列表排序与每列的自定义排序
- 11. 按年份排序自定义列表
- 12. Python:自定义排序列表
- 13. Zend Db按自定义列表排序
- 14. C#排序自定义列表
- 15. 自定义列表框排序
- 16. NETJson,如何序列化自定义类型集合中的自定义类型
- 17. 没有确定类型的列表的自然排序
- 18. 如何序列化自定义对象类型的列表
- 19. NetSuite创建自定义类型的自定义列表
- 20. 自定义排序的元组的蟒蛇排序列表
- 21. 对包含自定义类的列表进行排序
- 22. 在自定义类的成员上排序(T)列表?
- 23. Jackson自定义列表实例类型
- 24. 通过拆自定义列表类型
- 25. 列表实现和自定义类型
- 26. C++中与Java泛型相比的自定义类型排序
- 27. 自定义类的列表
- 28. 无法投泛型列表到自定义列表类型
- 29. 使用Collections.sort排序自定义类数组列表字符串
- 30. 在自定义帖子类型列表中显示自定义分类列
您好。我使用的是“旧版本”排序,但它保留了一个未排序的元素:原始列表中的最后一个元素没有排序,它始终是最后一个元素。你知道什么可能是错的吗?谢谢 –
@MarcoCastanho:我不认为这会发生。听起来就像你在某个地方有bug。随意发布一个问题;请务必创建一个*最小*再现示例。 –