Hash 함수 직접 구현하기

#include <iostream>
#include <string>
using namespace std;


#define MOD 23124

int Hash[MOD];
long long hash_store[MOD];

int hash_key(string str){

  // 키 생성
  long long key = 0;
  for(int i = 0; str[i] != '\0'; i++)
    key = (key << 5) + str[i] - 'a' + 1;
  
  // 키 배치
  int pos = key % MOD;
  while(hash_store[pos] != 0){ // 비어있는 공간 나올때까지 탐색
    if(hash_store[pos] == key) // 키를 찾은 경우 탈출
      break;
    pos = (pos + 1) % MOD;
  }

  hash_store[pos] = key;
  return pos;
}


int main(){

  Hash[hash_key("aaa")] = 1;
  Hash[hash_key("bbb")] = 5;
  Hash[hash_key("ccc")] = 10;

  cout << Hash[hash_key("aaa")] << endl;
  cout << Hash[hash_key("bbb")] << endl;
  cout << Hash[hash_key("ccc")] << endl;

}

[참고] STL Hash

#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;

int main(){

  unordered_map<string, int> hash;

  hash.insert(make_pair("aaa", 1));
  hash.insert({"bbb", 2});
  hash.insert(make_pair("ccc", 3));

}