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