4. 생성자를 추가하고, 해시 테이블을 초기화합니다.
public:
hash_map(int n) : size(n)
{
data1 = std::vector<int>(size, -1);
data2 = std::vector<int>(size, -1);
}
해시 테이블을 모두 -1로 초기화했으며, 이는 모든 테이블이 비어 있음을 나타냅니다.
5. 룩업을 수행하는 lookup() 함수를 작성합니다.
std::vector<int>::iterator lookup(int key)
{
auto hash_value1 = hash1(key);
if (data1[hash_value1] == key)
{
std::cout << "1번 테이블에서 " << key << "을(를) 찾았습니다." << std::endl;
return data1.begin() + hash_value1;
}
auto hash_value2 = hash2(key);
if (data2[hash_value2] == key)
{
std::cout << "2번 테이블에서 " << key << "을(를) 찾았습니다." << std::endl;
return data2.begin() + hash_value2;
}
return data2.end();
}
룩업 함수는 양쪽 해시 테이블에서 키를 검색하고, 해당 위치를 나타내는 반복자를 반환합니다. 반복자가 항상 필요한 것은 아니지만, 여기서는 삭제 함수에서 이 반복자를 사용할 것입니다. 만약 원소를 찾지 못하면 data2 테이블의 마지막을 가리키는 반복자가 반환됩니다. 이 룩업 함수는 O(1)의 시간 복잡도를 가지며, 매우 빠르게 동작합니다.