Maps ve Sets: Anahtar-Değer Çiftleri ile Hızlı Veri Erişimi

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Maps ve Sets: Veriye Doğrudan ve Hızlı Erişim​


Bu yapılar, verileri bellekte rastgele değil, belirli bir matematiksel düzen (genellikle Red-Black Tree veya Hash Table) ile tutarlar. Bu sayede arama, ekleme ve silme işlemleri devasa veri setlerinde bile çok hızlı gerçekleşir.



1. std::set: Sadece Benzersiz Değerler​


set, içindeki her bir elemanın benzersiz (unique) olduğu bir koleksiyondur. Bir değeri set içine on kere eklemeye çalışsanız bile o sadece bir kez kaydedilir. Ayrıca elemanları otomatik olarak sıralı tutar.

Kullanım Alanı: Bir listedeki mükerrer kayıtları temizlemek veya bir değerin listede olup olmadığını çok hızlı kontrol etmek.

C++:
#include <set>

std::set<int> sayilar;
sayilar.insert(10);
sayilar.insert(20);
sayilar.insert(10); // Bu eklenmez, 10 zaten var!

cout << "Eleman sayisi: " << sayilar.size(); // Sonuc: 2



2. std:🗺️ Anahtar-Değer (Key-Value) İlişkisi​


map, bir "anahtar" (Key) kullanarak bir "değere" (Value) ulaşmanızı sağlayan bir sözlük yapısıdır. Tıpkı gerçek bir sözlükte kelimeye bakıp anlamını bulmak gibi.

Key (Anahtar): Değere ulaşmak için kullanılan benzersiz kimlik (Örn: Öğrenci No).

Value (Değer): Anahtara bağlı olan veri (Örn: Öğrenci Adı).

C++:
#include <map>

std::map<int, string> ogrenciler;
ogrenciler[101] = "Ahmet";
ogrenciler[102] = "Mehmet";

cout << "101 nolu ogrenci: " << ogrenciler[101]; // Ahmet



3. Map vs. Unordered_Map: Hangisi Daha Hızlı?​


C++'ta bu yapıların iki ana türü vardır. Aralarındaki fark, veriyi arka planda nasıl organize ettikleridir:

Özellikstd::map / std::setstd::unordered_map / set
Arka Plan YapısıDengeli Ağaç (Tree).Karma Tablosu (Hash Table).
SıralamaElemanlar her zaman sıralıdır.Sıralama garantisi yoktur.
Arama HızıO(log n) - Çok hızlı.O(1) - Süper hızlı.
Bellek KullanımıDaha az.Daha fazla (Hash tabloları için).



4. Kritik Bir İpucu: find() ve count()​


Bir anahtarın haritada olup olmadığını kontrol etmek için [] operatörünü kullanmak tehlikeli olabilir, çünkü eğer anahtar yoksa map o anahtarı otomatik olarak oluşturur. Bunun yerine güvenli yöntemleri kullanın:

C++:
if (ogrenciler.find(105) != ogrenciler.end()) {
cout << "Ogrenci bulundu!";
} else {
cout << "Boyle bir kayit yok.";
}



Sonuç​


Eğer verileriniz arasında hızlıca "arama" yapmanız gerekiyorsa veya verileri her zaman sıralı tutmak istiyorsanız Map ve Set sizin en iyi dostunuzdur. Özellikle büyük projelerde, arama maliyetini O(n)'den O(log n)'e indirmek programın performansını gözle görülür şekilde artırır.
 
Geri
Üst