2013-07-04 7 views
10

मुझे QMap के लिए कस्टम तुलनित्र फ़ंक्शन सेट करने का कोई तरीका नहीं मिला, जैसे कि मैं std::map (typename _Compare = std::less<_Key> अपने टेम्पलेट तर्कों का हिस्सा) के लिए कर सकता हूं।क्या क्यूएपी कस्टम तुलनात्मक कार्यों का समर्थन करता है?

क्या QMap एक सेट करने का कोई तरीका है?

उत्तर

14

यह दस्तावेज नहीं है (and it's a mistake, I think), लेकिन आप अपने प्रकार के लिए qMapLessThanKey टेम्पलेट फ़ंक्शन (सीएफ the source) का विशेषज्ञ कर सकते हैं। ,, फिर भी

template<> bool qMapLessThanKey<int>(const int &key1, const int &key2) 
{ 
    return key1 > key2; // sort by operator> ! 
} 

std :: नक्शा लाभ यह है कि आप प्रत्येक नक्शे प्रति एक अलग तुलनित्र निर्दिष्ट कर सकते हैं है यहाँ जब तुम नहीं कर सकते हैं (: यह अपने प्रकार के बजाय कुछ अन्य समारोह operator< का उपयोग करने की अनुमति देगा आपके प्रकार का उपयोग करने वाले सभी मानचित्रों को उस विशेषज्ञता को देखना चाहिए, या सबकुछ अलग हो जाएगा)।

1

नहीं, जहां तक ​​मुझे पता है कि क्यूमैप में उस कार्यक्षमता की आवश्यकता नहीं है, इसके लिए ऑपरेटर < ऑपरेटर होना महत्वपूर्ण है, इसलिए यदि आप वास्तव में कार्यक्षमता की तुलना करने की आवश्यकता है तो आप std :: map से फंस गए हैं।

1

QMap के मुख्य प्रकार को operator<() प्रदान करना होगा। QMap इसका उपयोग अपने आइटम को सॉर्ट करने के लिए करता है, और मानता है कि दो कुंजी x और y बराबर हैं यदि न तो x < y और y < x सत्य है।

मामले में, operator<() अधिभार।

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