मैं ऑब्जेक्ट्स का एक STL list
रखना चाहता हूं जहां प्रत्येक ऑब्जेक्ट में दो int
है। बाद में मैं पहले int
के मान के बाद सूची को क्रमबद्ध करना चाहता हूं। मैं इस तरह के फ़ंक्शन को कैसे बता सकता हूं जिसे इसे पहले int
के बाद क्रमबद्ध करना है?एक कस्टम प्रकार की एक सूची को क्रमबद्ध करना
उत्तर
आप कस्टम प्रकार की भविष्यवाणी निर्दिष्ट कर सकते हैं।
typedef std::pair<int, int> ipair;
std::list<ipair> thelist;
thelist.sort([](const ipair & a, const ipair & b) { return a.first < b.first; });
सी के पुराने संस्करणों ++ में आप एक उचित समारोह लिखने के लिए है: सी ++ 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 या वर्ग यह कुछ इस तरह काम करेगा था:
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);
या वैकल्पिक रूप से आप अपने struct के लिए operator <
परिभाषित कर सकते हैं और बस test_list.sort()
- 1. एक कस्टम क्लास सूची क्रमबद्ध करें <T>
- 2. क्रमबद्ध एक सूची वर्णानुक्रम
- 3. एक variables_map को क्रमबद्ध करना
- 4. प्रोटोबफ-नेट: खाली सूची को क्रमबद्ध करना
- 5. क्रमबद्ध dict द्वारा dicts की एक सूची को महत्व देता
- 6. जावा: एक अपरिवर्तनीय सूची को क्रमबद्ध करें
- 7. जावा: एक तत्व प्रकार की सूचियों को किसी अन्य प्रकार की सूची में परिवर्तित करना
- 8. एक कस्टम प्रकार विस्तार
- 9. क्यूटी: एक कस्टम इवेंट प्रकार को परिभाषित करना
- 10. एक ही प्रकार के नाम के साथ एक पॉलिमॉर्फिक सूची को क्रमबद्ध करें
- 11. एक कस्टम विशेषता के गुण प्रकार को प्रतिबंधित करना
- 12. उप-सूचियों की सूची में एक सूची को स्लाइड करना
- 13. एक Tdws प्रोग्राम को क्रमबद्ध करना
- 14. एकाधिक फ़ील्ड द्वारा वस्तुओं की एक सूची क्रमबद्ध करें
- 15. अपने दूसरे तत्वों द्वारा tuples की एक सूची क्रमबद्ध करें
- 16. बेस प्रकार की सूची को विरासत प्रकार
- 17. तारों की सूची को कैसे क्रमबद्ध करें?
- 18. क्रमबद्ध एक संपत्ति से एक सूची और फिर एक और
- 19. एक (क्रमबद्ध) JTable
- 20. सी #: कस्टम एक मान प्रकार
- 21. ऑब्जेक्ट्स की एक सूची संग्रहीत करना
- 22. सभी जोड़े की एक सूची तैयार करना
- 23. एक क्रमबद्ध सूची खोज रहे हैं?
- 24. सूचियों की एक सूची
- 25. एक कस्टम प्रकार के एक QVariant को QString
- 26. ऑब्जेक्ट्स की एक सूची प्रिंट करना
- 27. Magento स्टोरों की एक सूची प्राप्त करना
- 28. जावा में एक सूची को क्रमबद्ध कैसे करें?
- 29. क्रमबद्ध एक और एक
- 30. कस्टम ऑब्जेक्ट्स की सूची छंटनी
हैलो कॉल करें। मैं आपको "पुराना संस्करण" सॉर्ट का उपयोग कर रहा हूं लेकिन यह एक तत्व को छोड़ा जाता है: मूल सूची पर अंतिम तत्व सॉर्ट नहीं किया जाता है, यह हमेशा अंतिम तत्व बना रहता है। क्या आप जानते हैं कि क्या गलत हो सकता है? धन्यवाद –
@ मार्कोकास्टान्हो: मुझे नहीं लगता कि ऐसा हो सकता है/होना चाहिए। लगता है जैसे आपके पास कहीं एक बग है। एक प्रश्न पोस्ट करने के लिए स्वतंत्र महसूस करें; एक * न्यूनतम * पुनरुत्पादन उदाहरण बनाने के लिए सुनिश्चित करें। –