Sử dụng mảng liên kết

C++:
Sử dụng mảng liên kết

Làm thế nào:

Trong C++, mảng kết hợp được hiển thị với các tiêu đề <map><unordered_map>. Hãy phân tích các ví dụ để xem cả hai hoạt động như thế nào.

Sử dụng std::map

std::map giữ các phần tử được sắp xếp dựa trên khóa. Dưới đây là cách bạn bắt đầu:

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> ageMap;
    
    // Chèn giá trị
    ageMap["Alice"] = 30;
    ageMap["Bob"] = 25;
    
    // Truy cập giá trị
    std::cout << "Tuổi của Bob: " << ageMap["Bob"] << std::endl;
    
    // Duyệt qua một map
    for(const auto &pair : ageMap) {
        std::cout << pair.first << " là " << pair.second << " tuổi." << std::endl;
    }
    
    return 0;
}

Sử dụng std::unordered_map

Khi thứ tự không quan trọng, nhưng hiệu suất làm việc thì có, std::unordered_map là bạn của bạn, cung cấp độ phức tạp trung bình nhanh hơn cho việc chèn, tìm kiếm và xóa.

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    std::unordered_map<std::string, double> productPrice;
    
    // Chèn giá trị
    productPrice["milk"] = 2.99;
    productPrice["bread"] = 1.99;
    
    // Truy cập giá trị
    std::cout << "Giá sữa: $" << productPrice["milk"] << std::endl;
    
    // Duyệt qua một unordered_map
    for(const auto &pair : productPrice) {
        std::cout << pair.first << " có giá $" << pair.second << std::endl;
    }
    
    return 0;
}

Tìm hiểu sâu

Mảng kết hợp trong C++, đặc biệt là std::mapstd::unordered_map, không chỉ đơn giản là lưu trữ các phần tử. Chúng cung cấp nền tảng cho việc quản lý dữ liệu phức tạp hơn bằng cách cho phép thực hiện các thao tác như tìm kiếm, chèn và xóa trong thời gian độ phức tạp hiệu quả (logarithmic cho std::map và thời gian trung bình hằng số cho std::unordered_map). Hiệu quả này đến từ các cấu trúc dữ liệu cơ bản: một cây cân bằng cho std::map và một bảng băm cho std::unordered_map.

Theo lịch sử, trước khi chúng trở thành một phần của thư viện chuẩn, các lập trình viên sẽ phải tự mình triển khai các phiên bản của riêng họ hoặc sử dụng thư viện của bên thứ ba, dẫn đến sự không nhất quán và tiềm năng kém hiệu quả. Sự bao gồm của maps trong thư viện chuẩn của C++ không chỉ chuẩn hóa việc sử dụng chúng mà còn tối ưu hóa chúng cho hiệu suất trên các trình biên dịch và nền tảng khác nhau.

Mặc dù cả hai đều mạnh mẽ, lựa chọn giữa std::mapstd::unordered_map phụ thuộc vào chi tiết của trường hợp sử dụng cụ thể của bạn. Cần dữ liệu được sắp xếp và không quan tâm đến sự trao đổi hiệu suất nhỏ? Hãy chọn std::map. Nếu bạn đang theo đuổi tốc độ và không quan tâm đến thứ tự, std::unordered_map có lẽ là lựa chọn tốt hơn của bạn.

Tuy nhiên, điều quan trọng là phải lưu ý rằng khi làm việc với các cấu trúc dữ liệu phức tạp, luôn có sự trao đổi. Trong một số trường hợp cụ thể, các cấu trúc dữ liệu khác hoặc thậm chí là thư viện của bên thứ ba có thể cung cấp hiệu suất hoặc chức năng tốt hơn phù hợp với nhu cầu cụ thể của bạn. Luôn cân nhắc các lựa chọn của bạn dựa trên yêu cầu của dự án.