我想要一個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。隨意發佈一個問題;請務必創建一個*最小*再現示例。 –