1
Map trong C++ là gì? Làm thế nào để sử dụng map trong C++?
0
Chấn Phong20 đã đăng:

thêm bình luận...
2
minhkiet150 đã đăng:

Map trong C++ là gì?

Có lẽ trước khi biết đến map trong C++, bạn đã sử dụng qua rất nhiều các cấu trúc dữ liệu quen thuộc khác như cấu trúc mảng (array), danh sách liên kết (linked list), cấu trúc stack, queue, ..v.v. thì map cũng là một cấu trúc dữ liệu tương tự nằm trong thư viện chuẩn std của C++.

Map cũng chính như cái tên của nó, giúp bạn mường tượng được rằng nó là một tập hợp của nhiều phần tử như cấu trúc mảng, nhưng mỗi phần tử trong nó không đơn thuần chỉ là một số hoặc một giá trị cụ thể nào đó (như trong cấu trúc mảng), mà mỗi phần tử chính là một cặp bao gồm giá trị bắt đầu gọi là key (tạm dịch là chìa khóa) và giá trị đích value (tạm dịch là giá trị ẩn), chúng ta cần giá trị bắt đầu để dẫn đường tới thứ ẩn đằng sau nó.

Lấy cuốn từ điển làm ví dụ, chúng ta có một từ không hiểu, gọi từ đó là key, dùng từ đó để tra trong từ điển, nó sẽ dẫn tới một đoạn văn giải thích nào đó, thì đoạn văn đó gọi là value. Ví dụ, "nước": "một loại chất lỏng không mùi không vị".

Trong lập trình, khi bạn muốn dùng một định danh nào đó thay thế cho giá trị ẩn thật sự đằng sau nó, ví dụ dùng từ "một" để thay thế cho số "1", thì bạn nên nghĩ ngay tới việc sử dụng cấu trúc map.

Sự khác nhau giữa mảng và map trong C++

Một điểm đặc biệt nữa là mỗi key trong map là duy nhất và không thể bị trùng lắp, trong khi giá trị ẩn của key đó thì có thể bị trùng lắp với giá trị ẩn của key khác, đây cũng là điều dễ hiểu bởi vì nếu chúng ta có hai điểm bắt đầu, chúng ta sẽ phân vân không biết chọn điểm bắt đầu nào, đó là một trong những tính chất quan trọng của map.

Nếu bạn muốn lưu danh sách các phần tử không bị trùng lắp hoặc đếm số lần xuất hiện của mỗi từ trong câu thì sao, map là sự lựa chọn hoàn hảo.

Làm thế nào để sử dụng map trong C++?

Bạn có thể tìm thấy cấu trúc map trong thư viện <map> của C++.

Sử dụng khá đơn giản, khai báo một cấu trúc map như sau:

map<kiểu dữ liệu của key, kiểu dữ liệu của value> someMap;

Trong đó kiểu dữ liệu của key thường là string, kiểu dữ liệu của value thường là giá trị số như int, float, ..v.v. someMap là tên bạn muốn đặt cho map.

Ví dụ:

#include <iostream>
#include <map>
using namespace std;

int main() {
    map<string, int> A; // Khởi tạo một map A

    // Thêm vào map A một số phần tử.
    A["One"] = 1;
    A["Two"] = 2;
    A["Three"] = 3;

    // Duyệt và xuất ra từng cặp giá trị key: value của mỗi phần tử trong map A
    map<string, int>::iterator it;
    for (it = A.begin(); it != A.end(); it++) {
        cout << it->first.c_str() << ": " << it->second << endl;
    }

    // Thêm vào một phần tử giá trị key trùng lặp, chuyện gì sẽ xảy ra?
    A["One"] = 10;

    // In kết quả map A ra màn hình sau khi thêm vào 1 key trùng lặp,
    // tự chạy code xem kết quả của chính bạn.
    for (it = A.begin(); it != A.end(); it++) {
        cout << it->first.c_str() << ": " << it->second << endl;
    }
}

Hope it help.

đã bổ sung 5.5 năm trước bởi
Avatar: B-Editor B-Editor0

cho em hỏi có phải ''map'' vs ''vector'' dùng như nhau không ạ?

Cộng đồng 14.08.2020

Trường hợp sử dụng thì vô vàn, trong một số trường hợp, bạn có thể sử dụng map hoặc vector thay thế cho nhau đều ok tuy nhiên còn cần phải xem xét vấn đề lưu trữ và truy xuất dữ liệu ra sao cho nhanh chóng, nhưng ở một số trường hợp chỉ có thể chọn 1 trong 2: map hoặc vector.

trungkfc02 19.09.2020
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)