Junior
Фарқи байни контейнерҳои map ва unordered_map дар C++ чист?
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> sorted_map;
sorted_map["banana"] = 3;
sorted_map["apple"] = 1;
sorted_map["cherry"] = 2;
// Баромад: apple 1, banana 3, cherry 2 (тартиб муҳим аст)
for (const auto& pair : sorted_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
std::cout << "---" << std::endl;
// std::unordered_map: тартиби элементҳо кафолатнашаванда
std::unordered_map<std::string, int> unordered_map;
unordered_map["banana"] = 3;
unordered_map["apple"] = 1;
unordered_map["cherry"] = 2;
// Баромад метавонад фарқ кунад (масалан, cherry 2, apple 1, banana 3)
for (const auto& pair : unordered_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
return 0;
}