C++ map’lar


ULASHISH

C++ map

Map elementlarni "kalit/qiymat" juftliklarida saqlaydi.

Map’dagi elementlar:

  • Kalitlar orqali (indeks orqali emas) murojaat qilinadi va har bir kalit noyob bo‘ladi.
  • Kalitlari bo‘yicha avtomatik ravishda o‘sish tartibida saralanadi.

Map’dan foydalanish uchun <map> sarlavha faylini qo‘shishingiz kerak:

// Include the map library #include <map>

Map yaratish

Map yaratish uchun map kalit so‘zidan foydalaning va burchakli qavslar <> ichida u saqlaydigan kalit va qiymatning tipini ko‘rsating. Oxirida map nomini ko‘rsating, masalan: map<keytype, valuetype> mapName:

Misol

// Create a map called people that will store strings as keys and integers as values map<string, int> people

Agar e’lon qilish paytida elementlar qo‘shmoqchi bo‘lsangiz, ularni jingalak qavslar {} ichida vergul bilan ajratib yozing:

Misol

// Create a map that will store the name and age of different people map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

Map elementlariga murojaat qilish

Massivlar va vektorlardagidek map elementlariga indeks raqamlari orqali murojaat qilib bo‘lmaydi.

Buning o‘rniga map elementiga kvadrat qavslar [] ichida uning kalitini ko‘rsatib murojaat qilishingiz mumkin:

Misol

// Create a map that will store the name and age of different people map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Get the value associated with the key "John" cout << "John is: " << people["John"] << "\n"; // Get the value associated with the key "Adele" cout << "Adele is: " << people["Adele"] << "\n";
O‘zingiz sinab ko‘ring »

Elementlarga .at() funksiyasi yordamida ham murojaat qilishingiz mumkin:

Misol

// Create a map that will store the name and age of different people map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };  // Get the value associated with the key "Adele" cout << "Adele is: " << people.at("Adele") << "\n"; // Get the value associated with the key "Bo" cout << "Bo is: " << people.at("Bo") << "\n";
O‘zingiz sinab ko‘ring »

Eslatma: Ko‘pincha kvadrat qavslar [] o‘rniga .at() funksiyasi afzal ko‘riladi, chunki element mavjud bo‘lmasa, u xato xabarini chiqaradi:

Misol

// Create a map that will store the name and age of different people map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Try to access an element that does not exist (will throw an exception) cout << people.at("Jenny");
O‘zingiz sinab ko‘ring »


Qiymatlarni o‘zgartirish

Kalitga bog‘langan qiymatni o‘zgartirishingiz ham mumkin:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Change John's value to 50 instead of 32 people["John"] = 50; cout << "John is: " << people["John"];  // Now outputs John is: 50
O‘zingiz sinab ko‘ring »

Biroq .at() funksiyasidan foydalanish xavfsizroq:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Change John's value to 50 instead of 32 people.at("John") = 50; cout << "John is: " << people.at("John");  // Now outputs John is: 50
O‘zingiz sinab ko‘ring »

Element qo‘shish

Map’ga element qo‘shish uchun kvadrat qavslardan [] foydalanish mumkin:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Add new elements people["Jenny"] = 22; people["Liam"] = 24; people["Kasper"] = 20; people["Anja"] = 30;
O‘zingiz sinab ko‘ring »

Lekin .insert() funksiyasidan ham foydalanishingiz mumkin:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Add new elements people.insert({"Jenny", 22}); people.insert({"Liam", 24}); people.insert({"Kasper", 20}); people.insert({"Anja", 30});
O‘zingiz sinab ko‘ring »

Kalitlari teng elementlar

Map’da kalitlari teng elementlar bo‘lishi mumkin emas.

Masalan, map’ga "Jenny" kalitini ikki marta qo‘shishga harakat qilsak, faqat birinchisi saqlanib qoladi:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Trying to add two elements with equal keys people.insert({"Jenny", 22}); people.insert({"Jenny", 30});
O‘zingiz sinab ko‘ring »

Xulosa qilib aytganda: qiymatlar teng bo‘lishi mumkin, lekin kalitlar noyob bo‘lishi shart.


Elementlarni olib tashlash

Map’dan muayyan elementlarni olib tashlash uchun .erase() funksiyasidan foydalanishingiz mumkin:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Remove an element by key people.erase("John");
O‘zingiz sinab ko‘ring »

Map’dan barcha elementlarni olib tashlash uchun .clear() funksiyasidan foydalanishingiz mumkin:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Remove all elements people.clear();

Map o‘lchamini aniqlash

Map’da nechta element borligini bilish uchun .size() funksiyasidan foydalaning:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; cout << people.size();  // Outputs 3
O‘zingiz sinab ko‘ring »

Map bo‘shligini tekshirish

Map bo‘sh yoki bo‘sh emasligini aniqlash uchun .empty() funksiyasidan foydalaning.

.empty() funksiyasi map bo‘sh bo‘lsa 1 (true), aks holda 0 (false) qaytaradi:

Misol

map<string, int> people; cout << people.empty(); // Outputs 1 (The map is empty)
O‘zingiz sinab ko‘ring »

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; cout << people.empty();  // Outputs 0 (not empty)
O‘zingiz sinab ko‘ring »

Eslatma: .count(key) funksiyasi yordamida muayyan element mavjudligini ham tekshirishingiz mumkin.

U element mavjud bo‘lsa 1 (true), aks holda 0 (false) qaytaradi:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; cout << people.count("John");  // Outputs 1 (John exists)
O‘zingiz sinab ko‘ring »

Map bo‘ylab sikl

Map bo‘ylab for-each sikli yordamida aylanib chiqishingiz mumkin. Biroq bunda bir-ikki narsani bilib qo‘yish kerak:

  • for sikli ichida auto kalit so‘zidan (C++ 11-versiyasida kiritilgan) foydalanishingiz kerak. Bu kompilyatorga har bir kalit-qiymat juftligi uchun to‘g‘ri ma’lumot tipini avtomatik aniqlash imkonini beradi.
  • Map elementlari ham kalitlardan, ham qiymatlardan iborat bo‘lgani uchun sikl ichida kalitlarga murojaat qilish uchun .first, qiymatlarga murojaat qilish uchun esa .second yozishingiz kerak.
  • Map’dagi elementlar kalitlari bo‘yicha avtomatik ravishda o‘sish tartibida saralanadi:

Misol

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; for (auto person : people) {   cout << person.first << " is: " << person.second << "\n"; }

Natija quyidagicha bo‘ladi:

Adele is: 45
Bo is: 29
John is: 32
O‘zingiz sinab ko‘ring »

Agar tartibni teskarisiga o‘zgartirmoqchi bo‘lsangiz, burchakli qavslar ichida greater<type> funktoridan quyidagicha foydalanishingiz mumkin:

Misol

map<string, int, greater<string>> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; for (auto person : people) {   cout << person.first << " is: " << person.second << "\n"; }

Natija quyidagicha bo‘ladi:

John is: 32
Bo is: 29
Adele is: 45
O‘zingiz sinab ko‘ring »

Maslahat: Map’lar bo‘ylab iterator yordamida ham aylanib chiqish mumkin, bu haqda keyingi bobda batafsil bilib olasiz.




W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!