HashMaps очень полезны для обеспечения быстрого доступа к данным. Сложность операций хеширования O(1)
, что очень быстро по сравнению с другими известными структурами, такими как двойные связанные списки, связанные списки или деревья.
Чтобы использовать uint64_t
в качестве ключа для хеша, вы можете использовать хеш-контейнеры, такие как GHASHLISH
Библиотека GLIB
является поточно-ориентированной и используется несколькими проектами с открытым исходным кодом. Он не поддерживает uint64_t
как ключ, поэтому вы должны предоставить свою собственную функцию hash_function.
Например, вы можете использовать FNV хэш
Вот краткий пример того, как хешировать uint64
до uint32
, используя FNV:
#define FNV_offset_basis 2166136261
#define FNV_prime 16777619
guint c_uint64_t_hash(gpointer data)
{
uint8_t* v =(uint8_t*)data;
guint hash = FNV_offset_basis;
for(int i=0;i<8;i++)
{
hash = hash ^ v[i];
hash = hash * FNV_prime;
}
return hash;
}