πŸ“š Hash table

Hash table


πŸ“š Hash table μ΄λž€?

  • ν‚€-κ°’(key-value) 쌍 데이터λ₯Ό λΉ λ₯΄κ²Œ μ €μž₯ν•˜κ³  검색할 수 μžˆλŠ” 데이터 ꡬ쑰이닀.
  • λ‚΄λΆ€μ μœΌλ‘œ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ 데이터λ₯Ό νŠΉμ • 버킷(bucket) 에 λ§€ν•‘ν•˜μ—¬ (O(1)) μˆ˜μ€€μ˜ 평ꡰ 검색 μ‹œκ°„μ„ 보μž₯ν•œλ‹€.

πŸ“š Hash table κ΅¬ν˜„ μ»¨ν…Œμ΄λ„ˆ

  1. unordered_map
    • ν‚€-κ°’(key-value) μŒμ„ μ €μž₯ν•˜λŠ” ν•΄μ‹œ ν…Œμ΄λΈ”
  2. unordered_set
    • 쀑볡 λ˜μ§€ μ•ŠλŠ” κ°’λ§Œ μ €μž₯ν•˜λŠ” ν•΄μ‹œ ν…Œμ΄λΈ”

πŸ“š κ΅¬ν˜„ 예제

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
    unordered_map<string, int> hashTable; // unordered_map<key, value> λ³€μˆ˜λͺ…;

    // 데이터 μ‚½μž…
    hashTable["apple"] = 10;
    hashTable["banana"] = 20;

    // 데이터 검색
    if (hashTable.find("apple") != hashTable.end()) {
        cout << "Apple count: " << hashTable["apple"] << endl;
    }

    return 0;
}

πŸ’‘ μ£Όμš” λ©”μ†Œλ“œ

호좜 μ„€λͺ…
insert() ν‚€ - κ°’ 쌍 μ‚½μž…
find() ν‚€ 검색
erase() νŠΉμ • ν‚€ μ‚­μ œ
count() ν‚€κ°€ μ‘΄μž¬ν•˜λŠ”μ§€ 확인
at() νŠΉμ • 킀에 ν•΄λ‹Ήν•˜λŠ” κ°’ λ°˜ν™˜
bucket()_count() λ²„ν‚·μ˜ 개수 λ°˜ν™˜
load_factor() μš”μ†Œ 수 / 버킷 수 λΉ„μœ¨ λ°˜ν™˜
rehash() 버킷 개수λ₯Ό 늘렀 좩돌 ν•΄κ²°

πŸ“Š μ‹œκ°„ λ³΅μž‘λ„

Β  평균 μ΅œμ•…
μ‚½μž… (O(1)) (O(n))
검색 (O(1)) (O(n))
μ‚­μ œ (O(1)) (O(n))

πŸ“Œ 정리

  • Hash table은 λΉ λ₯Έ 데이터 검색 을 ν•΄μ•Όν•  λ•Œ μœ μš©ν•˜λ‹€.
  • unordered_map κ³Ό unordered_set 두 κ°€μ§€κ°€ μ‘΄μž¬ν•œλ‹€.
  • unordered_map 은 ν‚€-κ°’(key-value) λ₯Ό κ°€μ§€κ³  μžˆλ‹€.
  • unordered_set 은 쀑볡 μ—†λŠ” κ°’ 을 κ°€μ§€κ³  μžˆλ‹€.