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