एसटीएल सी ++ hash_map का उपयोग करना ...stdext :: hash_map का उपयोग कैसे करें जहां कुंजी एक कस्टम ऑब्जेक्ट है?
class MyKeyObject
{
std::string str1;
std::string str2;
bool operator==(...) { this.str1 == that.str1 ... }
};
class MyData
{
std::string data1;
int data2;
std::string etcetc;
};
इस तरह ...
MyKeyObject a = MyKeyObject(...);
MyData b = MyData(...);
stdext::hash_map <MyKeyObject, MyData> _myDataHashMap;
_myDataHashMap[ a ] = b;
मैं त्रुटियों की एक पूरी लोड मिलता है। यहाँ पहले तीन ...
त्रुटि 1 त्रुटि C2784 हैं: 'bool std :: ऑपरेटर < (स्थिरांक std :: _ ट्री < _Traits> &, स्थिरांक std :: _ ट्री < _Traits> &) ': के लिए नहीं अनुमान टेम्पलेट तर्क सकता है' स्थिरांक MyKeyObject 'सी' से 'स्थिरांक std :: _ ट्री < _Traits> &: \ Program Files \ Microsoft दृश्य स्टूडियो 8 \ vc \ शामिल \ कार्यात्मक 143
01,235,त्रुटि 2 त्रुटि C2784: 'bool std :: ऑपरेटर < (स्थिरांक std :: basic_string < _Elem, _Traits, _Alloc> &, स्थिरांक _Elem *)': 'स्थिरांक एसटीडी के लिए टेम्पलेट तर्क अनुमान नहीं कर सकता है: : basic_string < _Elem, _Traits, _Alloc> & 'से' स्थिरांक टास्किंग :: MyKeyObject 'C: \ Program फ़ाइलें \ माइक्रोसॉफ्ट विजुअल स्टूडियो 8 \ vc \ \ कार्यात्मक 143
त्रुटि 3 त्रुटि C2784 में शामिल हैं:' बूल std :: ऑपरेटर < (स्थिरांक _Elem *, स्थिरांक std :: basic_string < _Elem, _Traits, _Alloc> &) ': के लिए टेम्पलेट तर्क अनुमान नहीं कर सकता' स्थिरांक _Elem * 'से ' स्थिरांक MyDataObject 'C: \ Program फ़ाइलें \ Microsoft दृश्य स्टूडियो 8 \ vc \ शामिल \ 143
...
अगर मैं कुछ एक पूर्णांक की तरह साधारण के लिए कुंजी सेट सब कुछ ठीक है कार्यात्मक।
मैं क्या गलत कर रहा हूं ?! शायद मुझे टेम्पलेट्स के साथ कुछ करने की ज़रूरत है?
क्या इस तरह की कस्टम कुंजी ऑब्जेक्ट का उपयोग करके डेटा तक पहुंचने का एक बेहतर (तेज?) तरीका है?
'hash_map' एक पुराने विस्तार है। Tr1 के 'unordered_map', या बूस्ट का उपयोग करें। – GManNickG