की तुलना करके मैं 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
यह एक सी ++ 0x केवल उत्तर है। ;) संपादित करें: अब तय किया गया है ('>>' टोकन दो नेस्टेड टेम्पलेट बंद कर रहा है '<> 'जोड़े केवल सी ++ 0x है)। –
@ चार्ल्स: हा! हाँ, मैं शायद इसे बहुत सारे जवाब में करता हूं। मैं भी एक कंपाइलर का उपयोग करने के लिए प्रयोग किया जाता है जो '>>' का समर्थन करता है। –
+1: मुझे नहीं पता था कि 'std :: pair :: ऑपरेटर <() 'अधिभारित था। मैं अब करुँ! –