Here's a good hashing algorithm if you need it as an int:
Code:
// parameter macros
#define HASH_ALG_PARAMS const str[], len
#define HASH_STR str[]
#define HASH_STR_LEN len
// 'hash' value based macros
#define HASH_VAL hash
#define INITIALIZE_HASH_ALG(%1) new HASH_VAL = %1
#define SET_HASH_VAL(%1) HASH_VAL = (%1)
// loop based macros
#define HASH_LOOP_VAR loop_var
#define HASH_LOOP_CHAR str[HASH_LOOP_VAR]
#define HASH_ALG_LOOP() static HASH_LOOP_VAR; for( HASH_LOOP_VAR = 0; HASH_LOOP_VAR < HASH_STR_LEN ; HASH_LOOP_VAR ++)
// returns a positive value, suitable for a hash algorithm.
#define RETURN_HASHED_VALUE() return ( HASH_VAL & 0x7FFFFFFF)
// Simple and proven algorithms
#define HASHTABLE_SIMPALG_ADD RSHash
#define HASHTABLE_SIMPALG_ROT JSHash
// General purpose algorithms used by reputable companies
// probably for 16-bit; don't work so well on 32-bit
#define HASHTABLE_GENALG_BELL PJWHash
#define HASHTABLE_GENALG_UNIX ELFHash
// Specific purpose algorithms, designed for a certain use.
#define HASHTABLE_SPALG_SEED BKDRHash
#define HASHTABLE_SPALG_SORT DEKHash
// These algorithms do very well in their areas of expertise.
#define HASHTABLE_EXALG_VARIANCE SDBMHash
#define HASHTABLE_EXALG_SPEED DJBHash
#define HASHTABLE_EXALG_RELIABLE APHash
// Simplest addative hashing algorithm
// Speed: 129 || 1288
// Collisions: 2 || 462
// Renders very few collisions, the second lowest, and has a consistant speed of hashing, if a bit higher than normal.
// General purpose
RSHash(HASH_ALG_PARAMS)
{
INITIALIZE_HASH_ALG(0);
new b = 378551;
new a = 63689;
HASH_ALG_LOOP()
{
SET_HASH_VAL( HASH_VAL * a + HASH_LOOP_CHAR );
a = a * b;
}
RETURN_HASHED_VALUE();
}
__________________