Sobes.tech
Junior

C++та map жана unordered_map контейнерлери арасындагы айырма эмнеде?

sobes.tech AI

AIден жооп

Негизги айырма - элементтер сакталуу жана алынганда:

  • std::map: Элементтер кілттер боюнча сорттолгон тартипте сакталат. Адатта, кызыл-кара дарагына негизделген. Издөө, кошуу жана өчүрүү логарифмдик күрделүүлүккө ээ O(log N), анда N - элементтер саны.
  • std::unordered_map: Элементтер хэш-таблицада сакталат. Тартипи эрежесиз. Орто эсепте, издөө, кошуу жана өчүрүү O(1) константтуу күрделүүлүккө ээ. Эң жаман учурларда, кагылышуулар болсо, күрделүүлүк O(N) жетиши мүмкүн.
Белги std::map std::unordered_map
Тартиптүүлүк Кілт боюнча (өсүүчү) Жок
Негизги структура Кызыл-кара дарак Хэш-таблица
Орто эсептүү күрделүүлүк O(log N) O(1)
Эң жаман күрделүүлүк O(log N) O(N)
Кілт талаптары < оператору Хэш-функция жана ==

Колдонуу мисалы:

#include <map>
#include <unordered_map>
#include <string>
#include <iostream>

int main() {
    // std::map: элементтер кілт боюнча тартипте
    std::map<std::string, int> сорттолгон_карта;
    сорттолгон_карта["банан"] = 3;
    сорттолгон_карта["алма"] = 1;
    сорттолгон_карта["жүзүм"] = 2;

    // Чыгуу: алма 1, банан 3, жүзүм 2 (тартип маанилүү)
    for (const auto& жуп : сорттолгон_карта) {
        std::cout << жуп.first << " " << жуп.second << std::endl;
    }

    std::cout << "---" << std::endl;

    // std::unordered_map: элементтердин тартиби кепилденбейт
    std::unordered_map<std::string, int> эркин_карта;
    эркин_карта["банан"] = 3;
    эркин_карта["алма"] = 1;
    эркин_карта["жүзүм"] = 2;

    // Чыгуу ар түрдүү болушу мүмкүн (мисалы, жүзүм 2, алма 1, банан 3)
    for (const auto& жуп : эркин_карта) {
        std::cout << жуп.first << " " << жуп.second << std::endl;
    }

    return 0;
}