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
- Key-Value Pair: Data disimpan dalam pasangan kunci-nilai.
- Unordered: Elemen-elemen tidak memiliki urutan tertentu.
- Hashing: Kunci di-hash untuk menentukan posisi elemen di tabel hash.
- 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
- Deklarasi Hash Map:
unordered_map<string, int> myMap;
- Menyimpan pasangan kunci-nilai di mana kunci adalah
string
dan nilai adalahint
.
- Penyisipan Elemen:
myMap["Alice"] = 25;
- Menambahkan pasangan kunci-nilai ke
unordered_map
.
- Akses Elemen:
myMap["Alice"]
mengembalikan nilai yang terkait dengan kunci “Alice”.
- Memeriksa Kunci:
myMap.find("David")
mengembalikan iterator ke elemen jika ditemukan, ataumyMap.end()
jika tidak.
- Penghapusan Elemen:
myMap.erase("Bob");
Menghapus elemen dengan kunci “Bob”.
- Iterasi:
- Menggunakan loop
for
untuk mencetak semua elemen dalamunordered_map
.
- Menggunakan loop
Fungsi Penting dalam std::unordered_map
Fungsi | Deskripsi |
---|---|
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
- Efisiensi Tinggi: Operasi rata-rata sangat cepat karena hashing.
- Kemudahan Penggunaan: API sederhana untuk menyimpan dan mengakses pasangan key-value.
Perbedaan unordered_map
dan map
Fitur | unordered_map | map |
---|---|---|
Urutan Elemen | Tidak terurut | Terurut (berdasarkan kunci) |
Kompleksitas | Rata-rata O(1)O(1) | O(logn)O(\log n) |
Struktur Internal | Tabel Hash | Balanced Binary Search Tree (BST) |
Jika Anda ingin eksplorasi lebih lanjut, seperti implementasi dengan custom hash function, beri tahu saya! 😊
Leave a Reply