शामिल की एक विधि है जो हो सकती है यह जांचने के लिए प्रयोग किया जाता है कि कोई विशेष तत्व Vec में मौजूद है या नहीं। कैसे जांचें कि Vec के सभी तत्व दूसरे Vec में समाहित हैं या नहीं? क्या मैन्युअल रूप से पुनरावृति करने और सभी तत्वों को स्पष्ट रूप से जांचने से कहीं अधिक संक्षिप्त है?

3
Some Name 6 अक्टूबर 2020, 16:13
2
other_vector.iter().all(|e| vector.contains(e)) बहुत बुरा नहीं लगता .
 – 
mcarton
6 अक्टूबर 2020, 16:17
3
एक अन्य विकल्प यह होगा कि दोनों को HashSet या दोनों में लोड किया जाए। BTreeSet और is_subset/is_superset का उपयोग करें। इसमें उच्च निरंतर ओवरहेड होगा, लेकिन यह द्विघात के बजाय रैखिक होना चाहिए जो कि संग्रह काफी बड़े होने पर शायद एक अच्छा विचार है।
 – 
Masklinn
6 अक्टूबर 2020, 16:25
वास्तव में, लेकिन लगभग सभी भाषाओं में जिन पर मैंने काम किया है, उनमें कुछ अलग था। इसलिए मैंने पूछा कि क्या मुझे कुछ याद आ रहा है और इसके लिए जंग में कोई तरीका है।
 – 
Some Name
6 अक्टूबर 2020, 16:28
3
सचमुच? मैं बॉक्स के बाहर वेक्टर-जैसे डेटास्ट्रक्चर के लिए सबसेट चेक का समर्थन करने वाली एक भी भाषा नहीं जानता। सेट डेटास्ट्रक्चर के लिए, निश्चित रूप से, लेकिन वेक्टर के लिए नहीं।
 – 
Sven Marnach
6 अक्टूबर 2020, 16:33
कम से कम यह एक
 – 
Some Name
6 अक्टूबर 2020, 16:44

2 जवाब

यदि आपने वैक्टर को सॉर्ट किया है, तो आप रैखिक समय में खोज कर सकते हैं:

    let mut vec = vec![0, 2, 4, 3, 6, 3, 5, 1, 0];
    let mut v = vec![1, 4, 3, 3, 1];

    vec.sort_unstable();
    v.sort_unstable();

    // Remove duplicates elements in v
    v.dedup();

    let mut vec_iter = vec.iter();
    assert!(v.iter().all(|&x| vec_iter.any(|&item| item == x)));

संदर्भ: C++ में std::includes है जो ठीक यही करता है।

2
x1hgg1x 31 जुलाई 2021, 11:11
यह गलत परिणाम देगा यदि v में दोहराए गए तत्व हैं - या कम से कम भिन्न परिणाम हैं। यह सही है यदि आवश्यकता यह है कि अन्य vec में प्रत्येक आइटम की समान संख्या हो।
 – 
Peter Hall
29 जुलाई 2021, 23:24
मैंने v में डुप्लिकेट तत्वों के मामले को संभालने के लिए अपना उत्तर संपादित कर लिया है।
 – 
x1hgg1x
31 जुलाई 2021, 11:13

आप वैक्टर को भी सॉर्ट कर सकते हैं और फिर समानता के लिए उनका परीक्षण कर सकते हैं:

fn main() {
    let mut v1 = vec![2, 3, 1];
    let mut v2 = vec![3, 1, 2];
    
    v1.sort();
    v2.sort();

    assert_eq!(v1, v2);
}
-4
Iulian Radu 6 अक्टूबर 2020, 16:18
4
ध्यान दें कि वे सब्मिटिंग के बारे में पूछ रहे हैं, न कि केवल समानता उदा। v1 में केवल 1 और 3 हो सकते हैं लेकिन 2 नहीं।
 – 
Masklinn
6 अक्टूबर 2020, 16:26