Junior
Ի՞նչն է տարբերությունը map և unordered_map-ի միջև C++-ում։
sobes.tech AI
Պատասխան AI-ից
std::map — մի ասոցատիվ կոնտեյներ, որը պահում է " բանալի-արժեք" զույգեր, որոնք դասավորված են բանալիով։ Հիմնված է կարմրո-սև ծառի վրա։ Մուտքագրման, մաքրման և հասանելիության ժամանակը լոգարիթմիկ է (O(log n))։
std::unordered_map — մի ասոցատիվ կոնտեյներ, որը պահում է "բանալի-արժեք" զույգեր հեշ-սեղանի մեջ։ Էլեմենտները չեն դասավորված։ Միջինում, մուտքագրման, մաքրման և հասանելիության ժամանակը կայուն է (O(1)), բայց ամենավատ դեպքում կարող է լինել գծային (O(n)), կոլիզիաների պատճառով։ Պահանջվում է հեշ-ֆունկցիա բանալիի տիպի համար և հավասարության օպերատոր (operator==)։
| Գծագիր | std::map |
std::unordered_map |
|---|---|---|
| Հիմք | Կարմրո-սև ծառ | Հեշ-սեղան |
| Էլեմենտների դասավորություն | Բանալիով | Չի կա |
| Միջին բարդություն գործողությունների (մուտք, ավելացում, ջնջում) | O(log n) | O(1) |
| Ամենավատ բարդություն | O(log n) | O(n) (կոլիզիաների դեպքում) |
| Պահանջներ բանալիի համար | < օպերատոր |
Հեշ-ֆունկցիա, == օպերատոր |
| Հիշողության սպառում | Ավելի | Փոքր (միջինում, կարող է փոփոխվել) |
Օգտագործման օրինակ:
#include <map>
#include <unordered_map>
#include <string>
int main() {
// `std::map`-ի օգտագործում
std::map<std::string, int> my_map;
my_map["apple"] = 1;
my_map["banana"] = 2;
my_map["orange"] = 3;
// Էլեմենտները պահվում են դասավորված ըստ բանալիի (apple, banana, orange)
// `std::unordered_map`-ի օգտագործում
std::unordered_map<std::string, int> my_unordered_map;
my_unordered_map["apple"] = 1;
my_unordered_map["banana"] = 2;
my_unordered_map["orange"] = 3;
// Էլեմենտները պահվում են անտարբեր կարգով
return 0;
}