Junior
C++ da map va unordered_map konteynerlari orasidagi farq nima?
sobes.tech AI
AIdan javob
Asosiy farq elementlar qanday saqlanib, qanday olinishi bilan bogʻliq:
std::map: Elementlarni kalit boʻyicha tartiblangan holda saqlaydi. Odatda, uni qizil-oq daraxt asosida amalga oshiriladi. Qidirish, qoʻshish va oʻchirish logarifmik murakkablikka ega O(log N), bu yerda N elementlar soni.std::unordered_map: Elementlarni xash jadvalida saqlaydi. Elementlarning tartibi tasodifiy. Oʻrtacha, qidirish, qoʻshish va oʻchirish O(1) konstant murakkablikka ega. Eng yomon holatda, koliziyalar boʻlsa, murakkablik O(N) ga yetishi mumkin.
| Xususiyat | std::map |
std::unordered_map |
|---|---|---|
| Tartiblanganlik | Kalit boʻyicha (oʻsish tartibida) | Yoʻq |
| Asosiy tuzilma | Qizil-oq daraxt | Xash jadvali |
| Oʻrtacha murakkablik | O(log N) | O(1) |
| Eng yomon holat | O(log N) | O(N) |
| Kalit talablari | < operatori |
Hash funksiyasi va == |
Foydalanish misoli:
#include <map>
#include <unordered_map>
#include <string>
#include <iostream>
int main() {
// std::map: elementlar kalit boʻyicha tartiblangan
std::map<std::string, int> sorted_map;
sorted_map["banana"] = 3;
sorted_map["apple"] = 1;
sorted_map["cherry"] = 2;
// Chiqish: apple 1, banana 3, cherry 2 (tartib muhim)
for (const auto& pair : sorted_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
std::cout << "---" << std::endl;
// std::unordered_map: elementlar tartibi kafolatlanmagan
std::unordered_map<std::string, int> unordered_map;
unordered_map["banana"] = 3;
unordered_map["apple"] = 1;
unordered_map["cherry"] = 2;
// Chiqish farq qilishi mumkin (masalan, cherry 2, apple 1, banana 3)
for (const auto& pair : unordered_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
return 0;
}