— C++ map ve unordered_map —

Kerim Fırat
3 min readNov 2, 2020

Map Cpp’de ilişkisel verileri saklamak için kullanılır ve STL kütüphanesinde yer alır. Verileri ilişkilendirmek için key-value yapılarını kullanır.
Dolayısıyla key(anahtar) kısmına value(değer) atanarak veriler ilişkilendirilerek liste olarak saklanır.
Map classı bu ilişkisel verileri key kısmına göre sıralı olarak tutar.
Sıralamada işlemini key kısmını baz alarak yapar. Dolayısıyla bu classın key kısmında yer alan değer uniq(eşsiz)’dir. Bu class’ı kullanabilmek için aşağıdaki kütüphanelerden birini include etmeniz gerekir.

#include <map>

veya

#include <bits/stdc++.h>

Aşağıda genel olarak map tanımlamasına yer verilmiştir:

map kullanım

Bu tanımlamanın sonuc çıktısı şöyle olacaktır:

map kullanm output

NOT: örnekte kullanılan iterator,önceki makalelerimde değinildiği için açıklama gereği duymadım.

Yukarıdaki örnekte key kısmı char tipinde bir map tanımladık ve value kısmına sırasıyla int tipinde değerler atadık. Bu örneğin çıktı kısmını incelediğimizde bünyesinde tuttuğu ilişkisel verileri key kısmına göre sıraladığını görüyoruz. Şayet map yerine farklı bir liste kullansaydık,sıralama işleminin olmadığını ve atanan değerlerin aynı şekilde çıktı olarak üretildiğini görecektik.
Dolayısıyla “unordered_map” class da yine map class gibi verileri ilişkisel tutarken,ama aynı zamanda bu verileri atanan sıraya göre bünyesinde barındıracaktır. Yani orjinal atama düzenini bozmadan saklayacaktır.
Ve bu class’ın da key kısmı tıpkı map’da olduğu gibi uniq(eşsiz)’dir

Aşağıda genel olarak unordered_map tanımlamasına yer verilmiştir:

unordered_map örnek

Bu tanımlamanın sonuc çıktısı şöyle olacaktır:

unordered_map output

Yukarıda verilen örneklerde map ve unordered_map arasındaki farkı gördük.
Tabi bu ikisi arasındaki fark bu kadar ile sınırlı değil. Bir yandan map class’ı oldukça etkin bir özellik sunarken,aynı zamanda bu özelliği performans maliyeti olarak bize dönüş sağlar.

Şimdi ise bazı “Competitive Programming” problemlerinde istenen bir algoritmaya örnekleyerek devam edelim.
Bu problemde bir string içerisinde yer alan karakterlerin tekrarlanma sayısı istenmektedir.Yani Cpp ile bir string içinde tekrarlanan karakterlerin sayısını bulan bir programı map kullanarak geliştireceğiz.

Algoritma adımları aşağıdaki gibidir:
1.Liste eleman olarak karakter ve karakterin tekrarlanma adetini ilişkisel olarak tutacaktır.
2.Kullanacağımız string’i ilk karakterden itibaren son karaktere kadar okuyarak ilerleyeceğiz.
3.String içerisindeki karakterler uniq olduğu için,map key kısmı için uygundur. Dolayısıyla bu örnek map ve unordered_map kullanımına uygundur.Böylece uniq key’a karşılık gelen value kısmını item üzerinden arttıracağız.
4.Son olarak bir döngü ile iterator kullanarak,elde ettiğimiz pair(key-value çifti)’i itr->first key ve itr->second velue’u ekrana basacağız.
Ve bu işlemi map’ın son elemanına ulaşana kadar devam ettireceğiz.

karakter sayısı örneği
karakter sayısı örnek çıktısı

Bu örnekte map class kullanıldı.
Ancak aynı örneği unordered_map kullanarak daha performanslı şekilde sonuç alabiliriz.

end of

--

--

Kerim Fırat
Kerim Fırat

Written by Kerim Fırat

Senior Android Platform(AOSP,AAOS) Architect,Open Source Contributor | Turkey Java User Group Vice Chairman | Author

No responses yet