जैसा कि पहले से ही कहा जा चुका है, मानक लाइब्रेरी एक गैर-सदस्य फ़ंक्शन टेम्पलेट प्रदान करती है जो किसी भी श्रेणी को यादृच्छिक एक्सेस इटरेटर्स की एक जोड़ी प्रदान कर सकती है।
वेक्टर को सॉर्ट करने के लिए सदस्य फ़ंक्शन के लिए पूरी तरह से अनावश्यक होगा। निम्नलिखित में एक ही अर्थ होगा:
std::sort(v.begin(), v.end());
v.sort();
एसटीएल के पहले सिद्धांतों में से एक है कि एल्गोरिदम कंटेनरों के लिए युग्मित नहीं कर रहे हैं। डेटा कैसे संग्रहीत किया जाता है और डेटा का उपयोग कैसे किया जाता है, उतना ही कम से कम युग्मित होना चाहिए।
आईटरेटर कंटेनरों (जो डेटा संग्रह करते हैं) और एल्गोरिदम (जो डेटा पर संचालित होते हैं) के बीच इंटरफ़ेस के रूप में उपयोग किए जाते हैं। इस तरह, आप एक बार एल्गोरिदम लिख सकते हैं और यह विभिन्न प्रकार के कंटेनर पर काम कर सकता है, और यदि आप एक नया कंटेनर लिखते हैं, तो मौजूदा जेनेरिक एल्गोरिदम का उपयोग अपनी सामग्री में हेरफेर करने के लिए किया जा सकता है।
कारण std::list
एक सदस्य फ़ंक्शन के रूप में अपना sort
फ़ंक्शन प्रदान करता है यह है कि यह एक यादृच्छिक सुलभ कंटेनर नहीं है; यह केवल बिडरेक्शनल इटरेटर्स प्रदान करता है (क्योंकि यह एक दोगुनी लिंक्ड सूची का प्रतिनिधित्व करने का इरादा है, यह समझ में आता है)। जेनेरिक std::sort
फ़ंक्शन को यादृच्छिक एक्सेस इटरेटर्स की आवश्यकता होती है, इसलिए आप इसे std::list
के साथ उपयोग नहीं कर सकते हैं। std::list
अपना खुद का sort
फ़ंक्शन प्रदान करता है ताकि इसे क्रमबद्ध किया जा सके।
सामान्य तौर पर, वहाँ दो मामलों में एक कंटेनर एक एल्गोरिथ्म को लागू करना चाहिए:
सामान्य एल्गोरिथ्म कंटेनर पर काम नहीं कर सकते, लेकिन वहाँ एक अलग, कंटेनर विशेष एल्गोरिथ्म है कि प्रदान कर सकता है समान कार्यक्षमता, जैसा कि std::list::sort
के मामले में है।
कंटेनर, एल्गोरिथ्म सामान्य एल्गोरिथ्म तुलना में अधिक कुशल है कि की एक विशिष्ट कार्यान्वयन प्रदान कर सकते हैं के रूप में std::map::find
के मामले में, एक तत्व लघुगणक समय में नक्शा (सामान्य std::find
एल्गोरिथ्म में पाया जा करने की अनुमति देता है एक रैखिक खोज करता है क्योंकि यह मान नहीं सकता कि श्रेणी क्रमबद्ध है)।
स्रोत
2010-12-03 06:21:54
यह वास्तव में एक डुप्लिकेट नहीं है, लेकिन एंड्रीटी का जवाब [क्यों सी ++ में वेक्टर के लिए कोई खोज नहीं है] (http://stackoverflow.com/questions/2994073/why-there-is-no-find-for- वेक्टर-इन-सी) संबंधित है। –
असल में एक बेहतर सवाल यह होगा: "सूची 'में' सॉर्ट() 'विधि क्यों है? आप' std :: sort()' का उपयोग क्यों नहीं कर सकते हैं जैसे 'वेक्टर' और सरणी? ' यह भी सुनिश्चित नहीं है कि आप एक सूची को सॉर्ट करना चाहते हैं तो यह क्यों "बेतुका" है। –
@j_random_hacker: बेतुकापन शायद मेरे दिमाग में, सूची का उपयोग करने के कारण को देखने के कारण है। मैं इसे एक साथ जुड़े एक श्रृंखला के लिंक की तरह कुछ देखता हूं, जिसे वेक्टर की तुलना में फिर से व्यवस्थित करने से पहले डिस्कनेक्ट किया जाना चाहिए, जिसे मैं कार्ड के एक पैक की तरह देखता हूं जिसे आसानी से शफ़ल किया जा सकता है। मेरी धारणा ... जब मैं सूचियों के साथ प्रोग्रामिंग से परिचित हूं तो यह स्पष्ट हो जाएगा। – Nav