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;
}