Junior
C++-də map və unordered_map konteynerləri arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Əsas fərq elementlərin necə saxlanılması və alınması ilə bağlıdır:
std::map: Elementləri açar üzrə sıralanmış qaydada saxlayır. Adətən, qırmızı-qara ağac əsasında həyata keçirilir. Axtarış, əlavə və silmə əməliyyatlarının logarifmik mürəkkəbliyi O(log N)-dir, burada N elementlərin sayıdır.std::unordered_map: Elementləri hash cədvəlində saxlayır. Elementlərin sırası təsadüfi olur. Orta hesabla, axtarış, əlavə və silmə əməliyyatları O(1) sabit mürəkkəbliyə malikdir. Ən pis halda, kolliziya baş verdikdə, mürəkkəblik O(N)-ə qədər arta bilər.
| Xüsusiyyət | std::map |
std::unordered_map |
|---|---|---|
| Sıralama | Açar üzrə (artma sıralama) | Xeyr |
| Əsas struktur | Qırmızı-qara ağac | Hash cədvəl |
| Orta mürəkkəblik | O(log N) | O(1) |
| Ən pis halda | O(log N) | O(N) |
| Açar tələbləri | Operator < |
Hash funksiyası və == |
İstifadə nümunəsi:
#include <map>
#include <unordered_map>
#include <string>
#include <iostream>
int main() {
// std::map: elementlər açar üzrə sıralanıb
std::map<std::string, int> sorted_map;
sorted_map["banana"] = 3;
sorted_map["apple"] = 1;
sorted_map["cherry"] = 2;
// Çıxış: apple 1, banana 3, cherry 2 (sıra vacibdir)
for (const auto& pair : sorted_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
std::cout << "---" << std::endl;
// std::unordered_map: elementlərin sırası təmin edilmir
std::unordered_map<std::string, int> unordered_map;
unordered_map["banana"] = 3;
unordered_map["apple"] = 1;
unordered_map["cherry"] = 2;
// Çıxış fərqli ola bilər (məsələn, cherry 2, apple 1, banana 3)
for (const auto& pair : unordered_map) {
std::cout << pair.first << " " << pair.second << std::endl;
}
return 0;
}