में किसी कुंजी के रूप में ऑब्जेक्ट संदर्भ का उपयोग करना मैं जानना चाहता हूं कि किसी ऑब्जेक्ट संदर्भ का उपयोग C++ में एक unordered_map कंटेनर में कुंजी के रूप में करना संभव है या नहीं।std :: unordered_map
#include <unordered_map>
class Object {
int value;
};
struct object_hash {
inline size_t operator()(const Object& o) const { return 0; }
};
std::unordered_map<Object&, int, object_hash> map;
जब इस सरल टुकड़ा संकलित करने के लिए कोशिश कर रहा है, मैं तरीकों परिभाषा के बारे में कुछ त्रुटियों मिला:
libC++
/usr/include/c++/v1/unordered_map:352:12: error: class member cannot be redeclared
size_t operator()(const _Cp& __x) const
libstdC++
/usr/include/c++/4.6/bits/hashtable_policy.h:556:5: error: ‘std::__detail::_Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable>::mapped_type& std::__detail::_Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable>::operator [with _Key = Object&, _Pair = std::pair, _Hashtable = std::_Hashtable, std::allocator >, std::_Select1st >, std::equal_to, object_hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, false, false, true>, std::__detail::_Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable>::mapped_type = int]’ cannot be overloaded
/usr/include/c++/4.6/bits/hashtable_policy.h:537:5: error: with ‘std::__detail::_Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable>::mapped_type& std::__detail::_Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable>::operator[](const _Key&) [with _Key = Object&, _Pair = std::pair, _Hashtable = std::_Hashtable, std::allocator >, std::_Select1st >, std::equal_to, object_hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, false, false, true>, std::__detail::_Map_base<_Key, _Pair, std::_Select1st<_Pair>, true, _Hashtable>::mapped_type = int]’
साथ जीसीसी 4.6 का उपयोग के साथ बजना का उपयोग करना अगर मैं इसके बजाय पुराने gnu hash_map का उपयोग करता हूं (__gnu_cxx :: हैश_मैप), मुझे यह समस्या नहीं है ।
क्या यह कुछ मानक नए मानक द्वारा लगाया गया है, और यदि हां, तो क्यों?
क्या इस सीमा को हल करने का कोई तरीका है?