की तुलना करके मैं vector
को कैसे क्रमबद्ध कर सकता हूं जो std::string
है? (स्थिर तुलना फ़ंक्शन प्रदान किए बिना, न ही बूस्ट का उपयोग करें)।स्ट्रिंग द्वारा std :: vector <std :: pair <std :: string, bool >> को सॉर्ट करना?
उत्तर
std::vector<std::pair<std::string, bool> > v;
std::sort(v.begin(), v.end());
std::pair
भार के operator<
second
तत्व द्वारा तो first
तत्व द्वारा पहले सॉर्ट करने के लिए। इस प्रकार, यदि आप डिफ़ॉल्ट सॉर्ट ऑर्डरिंग (operator<
) का उपयोग करके vector
को सॉर्ट करते हैं, तो आपको वांछित ऑर्डरिंग मिल जाएगी।
आप केवल .first
जोड़े पर ऑर्डर करने के लिए कस्टम तुलनाकर्ता का उपयोग कर सकते हैं।
sort(begin, end,
compose2(less<string>(),
select1st<pair<string, bool> >(),
select1st<pair<string, bool> >()));
ध्यान दें कि 'select1st' सी ++ मानक लाइब्रेरी का हिस्सा नहीं है। –
एमएमएम। सौभाग्य से, लिखना मुश्किल है: 'टेम्पलेट
मैं वास्तव में जेम्स 'उत्तर की तरह है, लेकिन वहाँ एक अन्य विकल्प आपको विचार करना चाह सकते है - केवल std::map
में सब कुछ फ़नल:
std::map<std::string, bool> myMap(v.begin(), v.end());
या, यदि आप नकली तार है, एक std::multimap
:
std::multimap<std::string, bool> myMultiMap(v.begin(), v.end());
यह के रूप में के लिए हे (एन) का विरोध किया, अतिरिक्त लाभ यह है कि यदि आप तो जोड़ने या नई कुंजी/मान जोड़े को दूर करने की जरूरत है, तो आप हे (एलजी एन) में ऐसा कर सकते है क्रमबद्ध वेक्टर।
यदि आपको वास्तव में वेक्टर का उपयोग करना होगा, तो जेम्स के उत्तर के साथ जाएं। हालांकि, अगर आपके पास जोड़े का वेक्टर है, तो एक अच्छा मौका है कि आप वास्तव में std::map
चाहते हैं।
मुझे उस मामले पर विचार करने की आवश्यकता है जहां उपयोगकर्ता उन्हें सॉर्ट नहीं करना चाहता था और क्रम में उन्होंने उन्हें दिया था। – jmasterx
भी वेक्टर + सॉर्ट अभ्यास में हो सकता है, जो कि बहुत से सामानों को एक (बहु) मानचित्र में डालने से कहीं अधिक तेज़ हो सकता है, भले ही बड़े-बड़े नोटेशन का कहना है। – Reunanen
- 1. std :: string <std::string>
- 2. std :: string को std :: vector <char>
- 3. std :: वेक्टर <std::string> क्रैश
- 4. std :: pair <int, std :: string> अच्छी तरह से परिभाषित करने का आदेश है?
- 5. एक शून्य :: वेक्टर <std :: string>
- 6. const std :: map <boost :: tuples :: tuple, std :: string>?
- 7. `std :: vector <uchar>` `std :: ostream` में कैसे सहेजें?
- 8. std :: vector <int> से 0
- 9. std :: स्ट्रिंग या std :: वेक्टर <char> कच्चे डेटा
- 10. std :: array <char, N> std :: string
- 11. कनवर्ट करना (शून्य *) से std :: vector <unsigned char>
- 12. std :: basic_string <TCHAR>
- 13. std :: multimap <key, value> और std :: map <key, std :: set <value>>
- 14. ++ std :: परमाणु <int>
- 15. घोषणा में "std :: वेक्टर <X> च();", "std :: वेक्टर <X>" एक इन्स्टेन्शियशन है?
- 16. std :: sub_match <T> सार्वजनिक रूप से std :: pair <T, T> से क्यों प्राप्त होता है?
- 17. सुविधाजनक स्ट्रीम std :: vector <unsigned char> इनपुट स्ट्रीम (std :: istream) ऑब्जेक्ट
- 18. std :: वेक्टर <double> विनाश sigabrt
- 19. std :: pair या std :: tuple
- 20. std :: context_wrapper <T> एक कंटेनर
- 21. `std :: vector <primitive> :: स्पष्ट()` निरंतर समय ऑपरेशन है?
- 22. std :: tr1 :: function <> ऑब्जेक्ट्स
- 23. मुख्य परिभाषित `मुख्य (std :: वेक्टर <std::string> तर्क) क्यों नहीं है?
- 24. मैं एक std :: वेक्टर <std::string> कैसे बना सकता हूं और फिर उन्हें सॉर्ट कर सकता हूं?
- 25. std :: सूची <std :: unique_ptr <T>>: गुजर इसके चारों ओर
- 26. क्या std :: list <> :: सॉर्ट स्थिर है?
- 27. पीछे std :: अनुपात डिजाइन सिद्धांत <>
- 28. मैं std :: atomic <unsigned int>
- 29. std :: unordered_set <Foo> वर्ग फू
- 30. std :: vector और std :: list
यह एक सी ++ 0x केवल उत्तर है। ;) संपादित करें: अब तय किया गया है ('>>' टोकन दो नेस्टेड टेम्पलेट बंद कर रहा है '<> 'जोड़े केवल सी ++ 0x है)। –
@ चार्ल्स: हा! हाँ, मैं शायद इसे बहुत सारे जवाब में करता हूं। मैं भी एक कंपाइलर का उपयोग करने के लिए प्रयोग किया जाता है जो '>>' का समर्थन करता है। –
+1: मुझे नहीं पता था कि 'std :: pair :: ऑपरेटर <() 'अधिभारित था। मैं अब करुँ! –