जंग में एक वेक्टर को कैसे सॉर्ट करें?


जवाबों:


92

कुल आदेश वाले तत्वों का एक परस्पर स्लाइस एक sortविधि है।

क्योंकि Vec<T>कार्यान्वयन DerefMut<[T]>, आप इस पद्धति को सीधे वेक्टर पर कॉल कर सकते हैं, इसलिए vector.sort()काम करता है।


टी प्रकार के लिए क्या आवश्यकताएं हैं? मुझे एक त्रुटि मिल रही है जो कहती है "Vec <MyType> किसी भी विधि को 'सॉर्ट' नाम के दायरे में लागू नहीं करता है।" मुझे संदेह है कि ऐसा इसलिए हो सकता है क्योंकि मैंने MyType के लिए कुछ लक्षण लागू नहीं किए, मेरे पास cmp :: PartialEq और cmp :: PartialOrd अब तक हैं।
मैक्सिम सेल्को नो

9
ऐसी sort_byविधि भी है जो पूरी तरह से कस्टम विधेय की अनुमति देती है।
ह्योन नोव

9
जैसा कि डॉक्स कहते हैं, self.sort()== self.sort_by(|a, b| a.cmp(b))
क्रिस मॉर्गन

1
आप केवल कॉल कर सकते हैं .sort()यदि प्रकार विशेषता को Tलागू करता cmp::Ordहै।
साइमन ज़ीक्स

1
आप sort_unstableइसे थोड़ा तेज़ भी देख सकते हैं, लेकिन "बराबर" तत्वों को फिर से व्यवस्थित कर सकते हैं
बोगडान मार्ट

1

जबकि ऊपर प्रस्तावित समाधान पूर्णांक के वैक्टर को सॉर्ट कर सकते हैं मुझे फ़्लोट के वैक्टर को छाँटने में समस्या थी।

सबसे सरल उपाय क्विकरॉर्ट टोकरा का उपयोग करना था , जो फ्लोट को भी सॉर्ट कर सकता है। क्विकर्सॉर्ट क्रेट किसी भी प्रकार के अन्य वैक्टर को भी सॉर्ट कर सकता है और तुलना (Sort_by) का उपयोग करने के लिए तरीकों को भी लागू करता है।

निम्नलिखित कोड है:

extern crate quickersort;
//let's create the vector with the values
let mut vals = Vec::new();
vals.push(31.2);
vals.push(31.2);
vals.push(10.0);
vals.push(100.4);
vals.push(4.1);
quickersort::sort_floats(&mut vals[..]); // sort the vector

11
आपको फ़्लोट को सॉर्ट करने के लिए एक अलग टोकरे की आवश्यकता नहीं होनी चाहिए - उदाहरण के लिए, v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))फ़्लोट्स के साथ काम करना चाहिए। (सरणी में NaNs के साथ आप क्या करना चाहते हैं इसके आधार पर, आप एक अधिक सावधान तुलनात्मक फ़ंक्शन लिख सकते हैं।)
user4815162342

4
मुझे फ़्लोटर्स के वैक्टर को छाँटने में समस्या थी - यही वजह है कि उस विशिष्ट समस्या ( stackoverflow.com/q/26489701/155423 , stackoverflow.com/q/28247990/155423 , stackoverflow.com/q/ को समर्पित संपूर्ण प्रश्न और उत्तर पहले से ही मौजूद हैं। 37127209/155423 )।
शेमपस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.