2010-02-24 10 views
5

मेरे पास तुलना वर्ग के साथ एक std :: सेट है जिसके लिए कुंजी की तुलना करने के लिए अतिरिक्त पैरामीटर की आवश्यकता होती है। यह चर पैरामीटर रन-टाइम में निर्धारित होता है और मैं इसे तुलना करने के लिए सुलभ बनाने के लिए सेट की चाबियों के अंदर पैक करता हूं।std पर अधिक डेटा गुजर रहा है: तुलना तुलना वर्ग

हालांकि, पैरामीटर तर्कसंगत रूप से कुंजी के बजाय सेट से संबंधित है, इसलिए यह समाधान अजीब दिखता है और सभी चाबियों पर समान मूल्य को डुप्लिकेट करता है।

तुलना वर्ग में अतिरिक्त पैरामीटर पास करने का कोई शानदार तरीका है? (मैंने पहले सेट :: value_comp के बारे में सोचा था, लेकिन जब मुझे संदर्भ की आवश्यकता होती है तो यह वस्तु द्वारा मूल्य की तुलना करता है)।

धन्यवाद।

उत्तर

0

एसटीडी की परिभाषा :: सेट है:

template < 
     class Key, 
     class Traits=less<Key>, 
     class Allocator=allocator<Key> 
> 
class set 

तो लक्षण है आपकी तुलना ऑपरेटर होना चाहिए, लेकिन अगर निर्माता देखेंगे, तो आप इसे वहाँ फिर से देख सकते हैं:

explicit set(
    const Traits& _Comp 
); 

तो बस अपना उदाहरण कन्स्ट्रक्टर को पास करें। (ध्यान दें कि इसे कॉपी करके किया जाता है)

+0

यह उत्तर सही है लेकिन मुझे इसका पालन करना मुश्किल लगता है। स्पष्टीकरण के लिए: आपको अतिरिक्त पैरामीटर के साथ एक तुलना ऑब्जेक्ट बनाने की आवश्यकता है, फिर उस ऑब्जेक्ट को std :: set constructor पर पास करें। सेट के निर्माण के बाद पैरामीटर को संशोधित करने का प्रयास न करें। –

+0

@ मार्क रान्ससम - नोस रजत बुलेट है, अगर सॉर्टिंग का नियम बदला जाता है, तो पूरा सेट पुनर्निर्मित किया जाना चाहिए। यदि पैरामीटर सॉर्टिंग ऑर्डर को प्रभावित नहीं करते हैं तो आप इसे संदर्भ या पॉइंटर द्वारा ट्रैट्स में पास कर सकते हैं। – Dewfy

+0

किसी नए को कॉपी करने के अलावा, किसी सेट को पुनर्निर्माण करने का कोई तरीका नहीं है, इसलिए मैं अपने कथन से खड़ा हूं। इनपुट ऑब्जेक्ट को इनपुट के समान सेट दिए जाने पर तुलना ऑब्जेक्ट को हमेशा वही मान वापस करना होगा, अन्यथा सेट खराब हो सकता है। –

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