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

Toán tử map::operator[] trong C++ STL


Trong bài viết này, chúng ta sẽ thảo luận về cách hoạt động, cú pháp và ví dụ của toán tử map::operator[] trong C++ STL.

Map trong C++ STL là gì?

Map là container liên kết, lưu trữ các phần tử dạng cặp key-value theo thứ tự cụ thể. Dữ liệu luôn được sắp xếp theo key. Giá trị được truy xuất qua key duy nhất.

Toán tử map::operator[] là gì?

map::operator[] là toán tử tham chiếu (reference operator). Toán tử này dùng để truy xuất phần tử trong container bằng key.

Đặc điểm quan trọng:

  • Nếu key không tồn tại, toán tử sẽ chèn phần tử mới với key đó và giá trị mặc định (0 cho số, rỗng cho string...), sau đó trả về tham chiếu đến giá trị đó.
  • Nếu key đã tồn tại, trả về tham chiếu đến giá trị hiện tại.
  • Khác với map::at(): at() ném exception out_of_range khi key không tồn tại, trong khi operator[] tự tạo mới.

Cú pháp

map_name[key];

Tham số

Chỉ có 1 tham số: key k muốn tham chiếu trong container.

Giá trị trả về

Trả về tham chiếu đến value liên kết với key k.

Ví dụ minh họa

Input

map<char, int> newmap; 
newmap.insert({1, 20}); 
newmap.insert({2, 30}); 
newmap[1];

Output

20

Ví dụ 1: Truy xuất và gán giá trị

#include <bits/stdc++.h>
using namespace std;

int main() {
    map<int, int> TP_1;
    
    // Gán giá trị qua operator[] (tự tạo key nếu chưa có)
    TP_1[1] = 10;
    TP_1[2] = 20;
    TP_1[3] = 30;
    TP_1[4] = 40;
    
    cout << "Element at TP[3] is: " << TP_1[3] << endl;
    return 0;
}

Kết quả

Element at TP[3] is: 30

Ví dụ 2: Kiểm tra key không tồn tại

#include <bits/stdc++.h>
using namespace std;

int main() {
    map<int, int> TP_1;
    TP_1[1] = 10;
    TP_1[2] = 20;
    TP_1[3] = 30;
    TP_1[4] = 40;
    
    cout << "Element at TP[3] is: " << TP_1[3] << endl;
    
    // Kiểm tra key 5 - sẽ tự tạo key 5 với giá trị 0
    if (TP_1[5] == 0) {
        cout << "Element at TP[5] doesn't exist (created with default 0)" << endl;
    } else {
        cout << "Element at TP[5] is: " << TP_1[5] << endl;
    }
    
    // Lưu ý: sau câu if, TP_1[5] đã tồn tại với giá trị 0
    cout << "Map size now: " << TP_1.size() << endl; // Sẽ là 5
    
    return 0;
}

Kết quả

Element at TP[3] is: 30
Element at TP[5] doesn't exist (created with default 0)
Map size now: 5

Cảnh báo: Sử dụng operator[] để chỉ đọc key có thể không tồn tại sẽ vô tình chèn key mới vào map. Nên dùng find() hoặc count() để kiểm tra tồn tại, và at() để truy xuất an toàn.