Penggunaan Hash Map di C++ dengan STL

Penggunaan Hash Map di C++ dengan STL

Hash Map di C++ biasanya diimplementasikan menggunakan container std::unordered_map yang terdapat dalam Standard Template Library (STL). std::unordered_map adalah struktur data yang menyimpan pasangan key-value dengan efisiensi pencarian, penyisipan, dan penghapusan rata-rata O(1).

Fitur Utama std::unordered_map

  1. Key-Value Pair: Data disimpan dalam pasangan kunci-nilai.
  2. Unordered: Elemen-elemen tidak memiliki urutan tertentu.
  3. Hashing: Kunci di-hash untuk menentukan posisi elemen di tabel hash.
  4. Efisiensi: Operasi pencarian, penyisipan, dan penghapusan rata-rata memiliki kompleksitas O(1)O(1).

Sintaks Dasar

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

int main() {
    unordered_map<string, int> myMap;

    // Menambahkan elemen ke Hash Map
    myMap["Alice"] = 25;
    myMap["Bob"] = 30;
    myMap["Charlie"] = 35;

    // Akses elemen menggunakan kunci
    cout << "Age of Alice: " << myMap["Alice"] << endl;

    // Memeriksa keberadaan kunci
    if (myMap.find("David") != myMap.end()) {
        cout << "David found in the map" << endl;
    } else {
        cout << "David not found in the map" << endl;
    }

    // Menghapus elemen
    myMap.erase("Bob");

    // Iterasi melalui Hash Map
    for (const auto& pair : myMap) {
        cout << pair.first << ": " << pair.second << endl;
    }

    return 0;
}

Penjelasan Kode

  1. Deklarasi Hash Map:
    • unordered_map<string, int> myMap;
    • Menyimpan pasangan kunci-nilai di mana kunci adalah string dan nilai adalah int.
  2. Penyisipan Elemen:
    • myMap["Alice"] = 25;
    • Menambahkan pasangan kunci-nilai ke unordered_map.
  3. Akses Elemen:
    • myMap["Alice"] mengembalikan nilai yang terkait dengan kunci “Alice”.
  4. Memeriksa Kunci:
    • myMap.find("David") mengembalikan iterator ke elemen jika ditemukan, atau myMap.end() jika tidak.
  5. Penghapusan Elemen:
    • myMap.erase("Bob"); Menghapus elemen dengan kunci “Bob”.
  6. Iterasi:
    • Menggunakan loop for untuk mencetak semua elemen dalam unordered_map.

Fungsi Penting dalam std::unordered_map

FungsiDeskripsi
insert(pair<key, value>)Menambahkan elemen baru ke unordered_map.
find(key)Mengembalikan iterator ke elemen jika ditemukan, atau end() jika tidak.
erase(key)Menghapus elemen berdasarkan kunci.
size()Mengembalikan jumlah elemen dalam unordered_map.
clear()Menghapus semua elemen.
count(key)Mengembalikan 1 jika kunci ditemukan, atau 0 jika tidak.

Contoh Lanjutan: Hitung Frekuensi Elemen

Contoh ini menunjukkan bagaimana std::unordered_map digunakan untuk menghitung frekuensi elemen dalam array:

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

int main() {
    vector<int> nums = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};

    unordered_map<int, int> freqMap;

    // Menghitung frekuensi elemen
    for (int num : nums) {
        freqMap[num]++;
    }

    // Menampilkan frekuensi elemen
    cout << "Element frequencies:\n";
    for (const auto& pair : freqMap) {
        cout << pair.first << ": " << pair.second << " times\n";
    }

    return 0;
}

Output:

Element frequencies:
1: 1 times
2: 2 times
3: 3 times
4: 4 times

Keuntungan Menggunakan std::unordered_map

  1. Efisiensi Tinggi: Operasi rata-rata sangat cepat karena hashing.
  2. Kemudahan Penggunaan: API sederhana untuk menyimpan dan mengakses pasangan key-value.

Perbedaan unordered_map dan map

Fiturunordered_mapmap
Urutan ElemenTidak terurutTerurut (berdasarkan kunci)
KompleksitasRata-rata O(1)O(1)O(log⁡n)O(\log n)
Struktur InternalTabel HashBalanced Binary Search Tree (BST)

Jika Anda ingin eksplorasi lebih lanjut, seperti implementasi dengan custom hash function, beri tahu saya! 😊

Leave a Reply

Your email address will not be published. Required fields are marked *