C++ (Qt)uint32 hash( const char * str ){ if (!str) return 0; uint32 val = 0; char * dst = (char *) &val; size_t i = 0; while (*str) { dst[i] ^= *str; ++str; i = (i + 1) % sizeof(val); } return val;}
C++ (Qt)const char * str = "abcdefghi"; QHash <const char *, int> hash;hash[str] = 1; char buf[256];strcpy(buf, str);qDebug() << hash.contains(buf);
C++ (Qt)template <class Key, class T>Q_INLINE_TEMPLATE bool QHash<Key, T>::contains(const Key &akey) const{ return *findNode(akey) != e;} template <class Key, class T>Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(const Key &akey, uint *ahp) const{ Node **node; uint h = qHash(akey); //Здесь безусловное вычисление ключа. //Но как это согласуется с приведённым Вами кодом?.. //Тогда бы он "false" не показывал if (d->numBuckets) { node = reinterpret_cast<Node **>(&d->buckets[h % d->numBuckets]); Q_ASSERT(*node == e || (*node)->next); while (*node != e && !(*node)->same_key(h, akey)) node = &(*node)->next; } else { node = const_cast<Node **>(reinterpret_cast<const Node * const *>(&e)); } if (ahp) *ahp = h; return node;}
C++ (Qt) uint h = qHash(akey); //Здесь безусловное вычисление ключа. //Но как это согласуется с приведённым Вами кодом?.. //Тогда бы он "false" не показывал}