Sobes.tech
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;
}