Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Duyệt map và unordered_map trong C++ STL

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ểmmapunordered_map
Cấu trúcCây RB (Red-Black Tree)Bảng băm (Hash Table)
Thứ tựSắp xếp theo keyKhông có thứ tự
Truy xuất trung bìnhO(log n)O(1)
Trường hợp xấuO(log n)O(n)

Chọn map khi cần thứ tự, unordered_map khi cần tốc độ tối đa.