더북(TheBook)

  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)의 시간 복잡도를 가지며, 매우 빠르게 동작합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.