std::map là container liên kết lưu trữ cặp key-value, sắp xếp theo key (thường dùng cây đỏ-đen). std::unordered_map dùng bảng băm (hash table), không đảm bảo thứ tự.
Phương thức phổ biến của map
begin(),end(): iterator đầu/cuối.size(),max_size(),empty(): thông tin kích thước.operator[],at(),find(),insert(),erase(): thao tác phần tử.
Ví dụ: Đếm tần suất với map
#include <bits/stdc++.h>
using namespace std;
int main() {
int A[] = {2, 2, 3, 2, 2, 4, 5, 4};
int n = sizeof(A) / sizeof(A[0]);
map<int, int> my_map;
for (int i = 0; i < n; i++) my_map[A[i]]++;
cout << "Item Frequency\n";
for (auto p : my_map)
cout << p.first << " : " << p.second << endl;
return 0;
}
Kết quả (map - có thứ tự)
Item Frequency 2 : 4 3 : 1 4 : 2 5 : 1
Ví dụ: unordered_map
#include <bits/stdc++.h>
using namespace std;
int main() {
int A[] = {2, 2, 3, 2, 2, 4, 5, 4};
int n = sizeof(A) / sizeof(A[0]);
unordered_map<int, int> my_map;
for (int i = 0; i < n; i++) my_map[A[i]]++;
cout << "Item Frequency\n";
for (auto p : my_map)
cout << p.first << " : " << p.second << endl;
return 0;
}
Kết quả (unordered_map - thứ tự ngẫu nhiên)
Item Frequency 5 : 1 4 : 2 2 : 4 3 : 1
So sánh nhanh
| Đặc điểm | map | unordered_map |
|---|---|---|
| Cấu trúc | Cây RB (Red-Black Tree) | Bảng băm (Hash Table) |
| Thứ tự | Sắp xếp theo key | Không có thứ tự |
| Truy xuất trung bình | O(log n) | O(1) |
| Trường hợp xấu | O(log n) | O(n) |
Chọn map khi cần thứ tự, unordered_map khi cần tốc độ tối đa.