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