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