/**/ /* Name: hash class Copyright: all right reserved @ lizuding@gmail.com Author: lizuding@gmail.com Date: 23-01-08 14:25 Description: hash class*/ class Hash ... {public: Hash(); ~Hash(); void add(string key); int find(string key); protected: static const int DEFAULT_SIZE = 10; int hash(const string & key); int rehash(const int pseudo_pos); private: string *m_pData; } ;Hash::Hash() ... { m_pData = new string[DEFAULT_SIZE]; for (int i = 0; i < DEFAULT_SIZE; ++ i) m_pData[i] = "";} Hash:: ~ Hash() ... { delete[] m_pData; } void Hash::add( string key) ... { int pos = hash(key); if ( m_pData[pos] != "" ) pos = rehash(pos); m_pData[pos] = key;} int Hash::find( string key) ... { int pos = hash(key); while ( m_pData[pos] != key ) pos = ++pos % DEFAULT_SIZE; return pos;} int Hash::hash( const string & key) ... { return key.c_str()[0] - 'A'; } int Hash::rehash( int pseudo_pos) ... { do ...{ pseudo_pos = ++ pseudo_pos % DEFAULT_SIZE; }while (m_pData[pseudo_pos] != ""); return pseudo_pos;}