2009-08-27 9 views

उत्तर

75

आप किस तुलनित्र का उपयोग कर रहे हैं?

डिफ़ॉल्ट के लिए यह काम करेगा:

if(!myset.empty()) 
    *myset.rbegin(); 
else 
    //the set is empty 

यह भी लगातार समय के बजाय max_element समाधान की तरह रैखिक हो जाएगा।

+0

अधिकतम तत्व ढूँढना निरंतर समय है, हां, लेकिन सेट को पॉप्युलेट करना नहीं है, क्योंकि यह डालने पर सॉर्ट कर रहा है। एक unordered_set निरंतर समय सम्मिलित है, लेकिन अधिकतम तत्व के लिए एक खोज की आवश्यकता होगी। – crunchdog

+1

लेकिन मूल प्रश्न "मेरे पास एक std :: set" के साथ शुरू होता है, इसलिए हम मान सकते हैं कि हमारी खोज तंत्र के बावजूद गैर-निरंतर सम्मिलन समय व्यतीत किया जा रहा है। चूंकि आपने पहले ही कीमत चुकाई है, फिर भी निरंतर समय की खोज विधि का उपयोग करके इसका लाभ क्यों नहीं लेते? – Darryl

+0

@ क्रंचडॉग: 'unordered_set' में केवल स्थिर समय औसत-मामला है, लेकिन इसमें रैखिक समय सबसे खराब मामला है, जो' सेट' – user102008

6

मेरा मानना ​​है कि आप std::max_element लिए देख रहे हैं:

max_element() समारोह रेंज [प्रारंभ, समाप्ति) में सबसे बड़ा तत्व को एक iterator देता है।

+14

यह यह करने के लिए धीमी गति से जिस तरह की तरह लगता है में int max में मूल्य को बचाने के। –

+2

यह मेरे आराम क्षेत्र के बाहर एक प्रश्न का उत्तर देने के लिए मिलता है :) मुझे नहीं पता था कि एक 'std :: set' डिफ़ॉल्ट रूप से क्रमबद्ध किया गया था। चूंकि मैंने माना कि यह एक ओ (एन) एल्गोरिदम को हल नहीं किया गया था, केवल एकमात्र व्यावहारिक विकल्प प्रतीत होता था। अब मुझे पता है कि मुझे क्या पता है, हाँ यह जवाब इष्टतम नहीं है। –

29

सेट हमेशा आदेश दिया जाता है। मान लें कि आप डिफ़ॉल्ट तुलना (कम) का उपयोग कर रहे हैं, बस सेट में अंतिम तत्व को पकड़ें। rbegin() उपयोगी हो सकता है।

+0

सी ++ मानक आदेश गारंटी देता है : http://stackoverflow.com/q/8833938/895245 –

6

चूंकि सेट डिफ़ॉल्ट रूप से आरोही क्रम में तत्व को टाइप करता है, बस सेट में अंतिम तत्व चुनें।

-1

इससे पहले कि आप में push() अपने set<int> के बाद से max_element पता नहीं कर सकते हैं कि सीमा क्रमबद्ध किया जाता है, वैश्विक चर

+0

कृपया बताएं कि आपका उत्तर क्या करना है, और शायद एक कोड उदाहरण प्रदान करें? मैं उत्सुक हूं कि आप किसके साथ आते हैं! – andrewgu

संबंधित मुद्दे