Haritada C++ Standart Şablon Kitaplığı (STL)

Harita Nedir? C++? Sözdizimi

In C++, MAP öğeleri eşlenmiş bir biçimde depolayan ilişkisel bir kaptır. Haritadaki her öğe anahtar/değer ve eşlenen değerden oluşur. Eşlenen iki değer aynı anahtar değerleri paylaşamaz.

Anahtar değerler, öğeleri benzersiz şekilde sıralamak ve tanımlamak için kullanışlıdır. Eşlenen değerler, anahtarla ilişkili içeriği depolamak içindir. İkisinin türleri farklı olabilir, ancak üye türü bunları her ikisini de birleştiren bir çift türü aracılığıyla birleştirir.

Neden std::map kullanıyorsunuz?

Haritayı kullanmanın nedenleri şunlardır:

  • std:: harita, benzersiz anahtarları yalnızca seçilen sıralama kriterlerine göre sıralanmış düzende saklar.
  • Tuşu kullanarak öğeleri aramak kolay ve hızlıdır.
  • Her tuşa yalnızca bir öğe eklenmiştir.
  • std::map ilişkisel bir dizi olarak kullanılabilir.
  • std::map ikili ağaçlar (dengeli) kullanılarak uygulanabilir.

Sözdizimi

Std::map'i bildirmek için şu sözdizimini kullanın:

std::map<key_datatype, value_datatype>map_name; 
  • The key_datatype harita anahtarlarının veri tipini belirtir.
  • The value_datatype harita anahtarlarına karşılık gelen değerlerin veri tipini belirtir.
  • The map_name haritanın adıdır.

Örneğin:

map<string, int> my_map; 

adında bir harita ilan ettik. my_map. Haritanın şu şekilde bir dizesi olacak: anahtar veri türleri ve tam sayı olarak değerlerimiz veri tipi.

Üye türleri

Üye fonksiyonları, parametre veya dönüş tipi olarak aşağıdaki üye tiplerini kullanabilir:

  • anahtar türü: Anahtar (Şablondaki ilk parametre)
  • eşlenen_tip: T (Şablondaki ikinci parametre)
  • anahtar_karşılaştır: Karşılaştır (Şablondaki üçüncü parametre)
  • ayırıcı_türü: Alloc (Şablondaki dördüncü parametre)
  • değer türü: çift
  • değer_karşılaştır: Öğeleri karşılaştırmak için iç içe geçmiş işlev sınıfı
  • referans: tahsisat_türü::referans
  • const_reference: allocator_type::const_reference
  • işaretçi: ayırıcı_tipi::işaretçi
  • const_pointer: allocator_type::const_pointer
  • yineleyici: value_type'a çift yönlü bir yineleyici
  • const_iterator: const value_type'a çift yönlü bir yineleyici
  • ters_iteratör: ters yineleyici
  • const_reverse_iterator: sürekli bir ters yineleyici
  • fark_tipi: ptrdiff_t
  • Beden Çeşidi: size_t

std::map'in Yerleşik İşlevleri

std::map yerleşik işlevlerle birlikte gelir. Bunlardan bazıları şunlardır:

  • başlamak() - Bu işlev yineleyiciyi haritanın ilk öğesine döndürür.
  • boyut() -Bu işlev bir haritadaki öğelerin sayısını döndürür.
  • boş() -Bu işlev, haritanın boş olup olmadığını belirten bir Boolean değeri döndürür.
  • insert( çift(anahtar, değer)) – Bu işlev, bir haritaya yeni anahtar/değer çifti ekler.
  • bul(val) – Bu fonksiyon, val elemanı bulunursa yineleyiciyi verir. Aksi takdirde, m.end() döndürür.
  • Sil (yineleyici konumu) – Bu işlev, yineleyicinin işaret ettiği konumdaki öğeyi siler.
  • sil(const g) – Bu işlev, g anahtar/değer çiftini haritadan siler.
  • Temizlemek () -Bu işlev bir haritadaki tüm öğeleri siler.

Harita Öğeleri Üzerinde Yineleme

Harita öğeleri üzerinde yineleme yapabilirsiniz. Bunun için sadece bir yineleyici oluşturup onu kullanmamız gerekiyor.
Örneğin:

Örnek 1:

#include <iostream>
#include <string>
#include <map> 

using namespace std;
int main() {

	map<int, string> Students;

	Students.insert(std::pair<int, string>(200, "Alice"));

	Students.insert(std::pair<int, string>(201, "John"));

	cout << "Map size is: " << Students.size() << endl;

	cout << endl << "Default map Order is: " << endl;

	for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) {

		cout << (*it).first << ": " << (*it).second << endl;
	}
}

Çıktı:

Harita Öğeleri Üzerinde Yineleme

İşte kodun ekran görüntüsü:

Harita Öğeleri Üzerinde Yineleme

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için dize başlık dosyasını kodumuza ekleyin.
  3. İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  5. Ara main() işlev. { işlevin gövdesinin başlangıcını belirtir.
  6. Anahtarların tamsayı ve değerlerin dize olacağı Öğrenciler adında bir harita oluşturun.
  7. Haritaya değerler ekleyin Öğrenciler. Haritaya 200'lük bir anahtar ve Alice'in değeri eklenecektir.
  8. Haritaya değerler ekleyin Öğrenciler. Haritaya 201 anahtarı ve John değeri eklenecektir.
  9. Kullan size() Öğrenciler adlı haritanın boyutunu alma işlevi. Bu 2 değerini döndürmelidir.
  10. Konsola bir miktar metin yazdırın.
  11. Öğrenciler adlı haritanın öğeleri üzerinde yineleme yapacak şekilde adlandırılmış bir yineleyici oluşturmak için bir for döngüsü kullanın.
  12. Öğrenciler haritasının değerlerini konsola yazdırın.
  13. For döngüsünün gövdesinin sonu.
  14. Vücudun sonu main() fonksiyonu.

Std::map'e veri ekleme

Öğeleri std::map'e aşağıdaki komutu kullanarak girebilirsiniz: insert() işlev. std::map anahtarlarının benzersiz olması gerektiğini unutmayın.

Bu nedenle öncelikle haritada her bir anahtarın mevcut olup olmadığını kontrol eder. Mevcutsa giriş eklenmeyecektir ancak mevcut girişin yineleyicisini döndürür. Mevcut değilse, giriş eklenir.

Fonksiyonun şu varyasyonları vardır:

  • ekle(çift) – bu varyasyonla haritaya bir anahtar/değer çifti eklenir.
  • ekle(başlangıç_itr, bitiş_itr) – bu varyasyonla, girişler başka bir haritadan start_itr ve end_itr ile tanımlanan aralık içerisine eklenecektir.

The insert_or_assing() işlevi aynı şekilde çalışır insert() işlev, ancak verilen anahtar haritada zaten mevcutsa değeri değiştirilecektir.

Örnek 2:

#include <map>
#include <iostream>

using namespace std;

int main() {

	map<int, int> m{ {1,3} , {2,4} , {3,5} };

	m.insert({ 5, 6 });
	m.insert({ 1, 8 });

	m.insert_or_assign(1, 6);  
	
	cout << "Key\tElement\n";
	for (auto itr = m.begin(); itr != m.end(); ++itr) {
		cout << itr->first << '\t' << itr->second << '\n';
	}
	return 0;
}

Çıktı:

Std::map'e veri ekleme

İşte kodun ekran görüntüsü:

Std::map'e veri ekleme

Kod Açıklaması:

  1. İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  3. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  4. Ara main() işlev. { işlevin gövdesinin başlangıcını belirtir.
  5. Anahtarların tam sayı, değerlerin ise tam sayı olacağı m adında bir harita oluşturun. Haritaya üç giriş yapıldı.
  6. Haritaya yeni bir giriş ekleyin m. Haritaya 5'lik bir anahtar ve 6'lık bir değer eklenecektir.
  7. Zaten mevcut bir anahtara giriş yapılmaya çalışılıyor. 1 anahtarı haritada mevcut olduğundan giriş yapılmayacaktır.
  8. Kullanma insert_or_assign() Mevcut bir girişi ekleme veya değiştirme işlevi. 1 anahtarı zaten mevcut olduğundan değeri 6 olarak değiştirilecektir.
  9. Konsola bir miktar metin yazdırın. “\t” karakteri yatay bir boşluk oluştururken, “\n” karakteri fare imlecini bir sonraki satıra taşır.
  10. Kullanmak döngü için m adlı haritanın öğeleri üzerinde yineleme yapacak itr adında bir yineleyici oluşturmak.
  11. m haritasının değerlerini konsola yazdırın. “\t” karakteri, her tuş ile ona karşılık gelen değer arasında yatay bir boşluk oluşturur. Bunun aksine, “\n” karakteri fare imlecini her yinelemeden sonra bir sonraki satıra hareket ettirir.
  12. For döngüsünün gövdesinin sonu.
  13. Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
  14. Vücudun sonu main() fonksiyonu.

Haritada Arama

Biz kullanabilirsiniz find() Bir haritadaki öğeleri anahtarlarına göre arama işlevi. Anahtar bulunamazsa, işlev std::map::end döndürür. Aksi takdirde, aranan öğenin bir yineleyicisi döndürülür.

Örnek 3:

#include <iostream>
#include <string>
#include <map> 
using namespace std;
int main() {
	map<int, string> Students;
	Students.insert(std::pair<int, string>(200, "Alice"));
	Students.insert(std::pair<int, string>(201, "John"));
	std::map<int, string>::iterator it = Students.find(201);
	if (it != Students.end()) {
		std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';
	}
}

Çıktı:

Haritada Arama

İşte kodun ekran görüntüsü:

Haritada Arama

Kod Açıklaması:

  1. Fonksiyonlarını hata almadan kullanabilmek için iostream başlık dosyasını kodumuza ekleyin.
  2. Fonksiyonlarını hata almadan kullanabilmek için string başlık dosyasını kodumuza ekleyin.
  3. Harita başlık dosyasını hata almadan fonksiyonlarını kullanabilmek için kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  5. Ara main() işlev. { gövdesinin başlangıcını işaret eder main() fonksiyonu.
  6. Anahtarları tamsayılar ve değer dizeleri olacak olan Öğrenciler adında bir harita oluşturun.
  7. Haritaya değerler ekleyin Öğrenciler. Haritaya 200'lük bir anahtar ve Alice'in değeri eklenecektir.
  8. Haritaya değerler ekleyin Öğrenciler. Haritaya 201 anahtarı ve John değeri eklenecektir.
  9. 201 anahtarıyla ilişkili değeri arayın.
  10. Anahtarın değerinin bulunup bulunmadığını kontrol etmek için bir if ifadesi kullanın.
  11. Anahtarın değerini konsoldaki bir metnin yanına yazdırın.
  12. If ifadesinin gövdesinin sonu.
  13. Vücudun sonu main() fonksiyonu.

Haritadan Veri Silme

Biz kullanabilirsiniz erase() Haritadan bir değeri silme işlevi. Basitçe silinecek öğeyi işaret eden bir yineleyici oluştururuz. Daha sonra yineleyiciye iletilir. erase() fonksiyonu.

Örnek 4:

#include <iostream>
#include <string>
#include <map>

using namespace std;
int main() {

	map<std::string, int> my_map;

	my_map.insert(std::make_pair("cow", 1));

	my_map.insert(std::make_pair("cat", 2));

	my_map["lion"] = 3;

	map<std::string, int>::iterator it = my_map.find("cat");

	my_map.erase(it);

	for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it)

		cout << (*it).first << ": " << (*it).second << endl;

  return 0;
}

Çıktı:

Haritadan Veri Silme

İşte kodun ekran görüntüsü:

Haritadan Veri Silme

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için dize başlık dosyasını kodumuza ekleyin.
  3. İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  5. Ara main() işlev. {, gövdenin başlangıcını işaret eder main() fonksiyonu.
  6. Anahtarları dizeler ve değerler tamsayıları olacak olan my_map adında bir harita oluşturun.
  7. Değerleri my_map haritasına ekleyin. Haritaya Cow anahtarı ve 1 değeri eklenecektir.
  8. Değerleri my_map haritasına ekleyin. Haritaya Cat anahtarı ve 2 değeri eklenecektir.
  9. Bir aslanın anahtarıyla my_map haritasına 3 değerini ekleyin.
  10. Anahtar kediyi bulmak için my_map haritası üzerinde yineleme yapmak üzere bir yineleyici oluşturun.
  11. Yineleyicinin işaret ettiği öğeyi silin.
  12. My_map haritasının öğelerini baştan sona yinelemek için bir yineleyici kullanın.
  13. My_map haritasının içeriğini konsolda yazdırın.
  14. Programın başarılı bir şekilde tamamlanmasının ardından çıktıyı döndürmesi gerekir.
  15. Vücudun sonu main() fonksiyonu.

ÖZET

  • Harita, öğeleri eşlenmiş bir biçimde depolayan ilişkisel bir kapsayıcıdır.
  • Haritadaki her öğenin bir anahtar değeri ve eşlenen bir değeri vardır.
  • Bir haritada eşlenen iki değer, anahtar değerleri paylaşamaz.
  • Anahtar değerler, öğelerin benzersiz şekilde sıralanmasına ve tanımlanmasına yardımcı olur.
  • Eşlenen değerler, anahtarla ilişkili içeriğin depolanmasına yardımcı olur.
  • C++ harita benzersiz anahtarları sıralı düzende saklar.
  • Birlikte çalışmak C++ haritada, öğeler üzerinde yineleme yapacak bir yineleyici yaratırız.
  • Yineleyici ile haritadaki öğeleri arama ve silme gibi görevleri gerçekleştirebiliriz.