निम्नलिखित कोड पर विचार करें। एक unordered_map में उपयोग करने के लिए कुंजी में सरणी के लिए एक अच्छा हैशिंग फ़ंक्शन क्या है?एक त्रि-राज्य द्वि-आयामी सरणी हैश कैसे है?
#include <unordered_map>
using namespace std;
enum TriState {
S0 = -1,
S1 = 0,
S2 = +1
};
struct K { // Key for the map
TriState a[8][8];
bool operator==(const K& k1) const {
for (int i = 0; i < 64; i++)
if (k1.a[0][i] != a[0][i])
return false;
return true;
}
};
struct Hash {
size_t operator()(const K& k) const {
size_t s;
// s = what is a good hash value?
return s;
}
};
unordered_map<K, int, Hash> m;
आम तौर पर बोर्ड गेम में ज़ोब्रिस्ट-हैशिंग का उपयोग किया जाता है। – wildplasser
ऑपरेटर == विधि पर मेरे अंदर ऑप्टिमाइज़र cringes। 64 int पढ़ता है जो संभवतः एक 16 बाइट बन सकता है जो थोड़ा सा झुकाव के साथ पढ़ता है। –
@ माइकल डॉर्गन: अनुकूलन विफल। बस 'memcmp' का उपयोग करें और संकलक को इसे सरल बनाएं :)। – kennytm