Junior
C++ da map va unordered_map o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
std::map — assotsiativ konteyner, kalit-qiymat juftlarini saqlaydi, kalit bo‘yicha tartiblangan. Qizil-oq daraxtga asoslangan. Elementlarga kirish, qo‘shish va o‘chirish vaqti logarifmik (O(log n)).
std::unordered_map — assotsiativ konteyner, kalit-qiymat juftlarini hash jadvalida saqlaydi. Elementlar tartibsiz. O‘rtacha kirish, qo‘shish va o‘chirish vaqti konstant (O(1)), ammo eng yomon holatda chiziqli (O(n)) bo‘lishi mumkin, koliziyalar sababli. Kalit turi uchun hash funksiyasi va tenglik operatori (operator==) talab qilinadi.
| Xususiyat | std::map |
std::unordered_map |
|---|---|---|
| Asos | Qizil-oq daraxt | Hash jadvali |
| Elementlar tartibi | Kalit bo‘yicha | Yo‘q |
| O‘rtacha operatsiya murakkabligi | O(log n) | O(1) |
| Eng yomon holat murakkabligi | O(log n) | O(n) (koliziyalar bilan) |
| Kalit uchun talablar | < operatori |
Hash funksiyasi, == operatori |
| Xotira iste'moli | Ko‘proq | Kamroq (o‘rtacha, o‘zgarishi mumkin) |
Misol uchun foydalanish:
#include <map>
#include <unordered_map>
#include <string>
int main() {
// std::map dan foydalanish
std::map<std::string, int> my_map;
my_map["apple"] = 1;
my_map["banana"] = 2;
my_map["orange"] = 3;
// Elementlar kalit bo‘yicha tartiblangan (apple, banana, orange)
// std::unordered_map dan foydalanish
std::unordered_map<std::string, int> my_unordered_map;
my_unordered_map["apple"] = 1;
my_unordered_map["banana"] = 2;
my_unordered_map["orange"] = 3;
// Elementlar tartibsiz
return 0;
}