2012-05-18 4 views
8

संभव डुप्लिकेट:
Sort list using stl sort function
why only std::list::sort()?std :: का उपयोग कर std :: सूचियों छँटाई तरह

मेरा प्रश्न कर सकते हैं हम प्रकार दो std :: एसटीडी का उपयोग करके सूचियां है प्रकार :: समारोह? मेरे पास 2 स्ट्रिंग सूचियां हैं

std::list<std::string>list1, list2; 
    .....//entering values to list 
    std::sort(list1.begin(), list1.end()); 

    std::sort(list2.begin(), list2.end()); 

जबकि मैं इन सूचियों को सॉर्ट कर रहा हूं, मुझे त्रुटि मिल रही है। मैंने std :: वेक्टर के साथ प्रयास किया, इस समय सॉर्ट काम करता है।

त्रुटि है

तरह

C: \ Program Files (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ कुलपति \ \ xutility (1158) शामिल हैं: की घोषणा देख 'std :: ऑपरेटर -' 1 > सी: \ प्रोग्राम फ़ाइलें (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ वीसी \ शामिल \ एल्गोरिदम (3642): त्रुटि C2784: '_Base1 :: difference_type std :: ऑपरेटर - (कॉन्स std :: _ Revranit < _RanIt, _Base> &, कॉन्स std :: _ Revranit < _RanIt2, _Base2> &) ' ' const std :: _ Revranit के लिए टेम्पलेट तर्क को कम नहीं कर सका < _RanIt, _Base> & एसटीडी ' से' :: _ List_iterator < _Mylist> ' 1> 1> के साथ [ 1> _Mylist = std :: _ List_val> 1>]

मुझे पता करने के लिए है कि केवल std :: सॉर्ट सूचियों का समर्थन करता है?

+0

अधिभार <अपनी वस्तु के लिए ऑपरेटर (यदि वह पहले से परिभाषित नहीं है) और प्रयोग std :: प्रकार:

हालांकि, std::list एक सदस्य समारोह sort कि यह सॉर्ट जाएगा। – Martol1ni

+0

संभावित डुप्लिकेट [क्यों केवल std :: list :: sort()?] (Http://stackoverflow.com/questions/7996116/why-only-stdlistsort) और [एसएलएल सॉर्ट फ़ंक्शन का उपयोग करके सॉर्ट सूची] (http://stackoverflow.com/questions/2432857/sort-list-using-stl-sort- कार्यक्षमता) –

+0

@ मार्टोल 1ni: यह 'std :: string' है। 'ऑपरेटर <'परिभाषित किया गया है, लेकिन यह मदद नहीं करेगा। –

उत्तर

37

आप std::list सॉर्ट करने के लिए std::sort उपयोग नहीं कर सकते, क्योंकि std::sort को इटरेटर को यादृच्छिक पहुंच की आवश्यकता होती है, और std::list इटेटर केवल बोली-प्रक्रियाक होते हैं।

list.sort(); 
// if you want to use a comparator different from the default one: 
// list.sort(comparator); 
7

आपको list::sort का उपयोग करना चाहिए, जो एक अलग एल्गोरिदम का उपयोग कर सकता है। std::sort को यादृच्छिक-पहुंच इटरेटर्स (मनमाने ढंग से आकार के समर्थन कूदने) की आवश्यकता होती है जबकि सूची इटरेटर केवल एक ही समय में एक लिंक द्वारा आगे या पीछे जा सकते हैं।

सी देखें ++ 11 25.4.1.1:

template<class RandomAccessIterator> void sort(RandomAccessIterator first, 
     RandomAccessIterator last); 

और 23.3.5.5/27 (std::list के सदस्य):

void sort(); 
template <class Compare> void sort(Compare comp);