std::map::at
#include <map>
Truy cập phần tử có key cho trước. Nó tương tự như toán tử [], nhưng at() kiểm tra xem key có tồn tại trong std::map hay không và ném ra ngoại lệ std::out_of_range nếu key không tồn tại.
mapped_type& at(const key_type& key);
const mapped_type& at(const key_type& key) const;
Tham số
key
- Giá trị của key cần truy cập.
Giá trị trả về
mapped_type&
- (phiên bản không const): Trả về tham chiếu (có thể đọc và ghi) đến
valuecủa phần tử có key bằngkey.
const mapped_type&
- (phiên bản const): Trả về tham chiếu hằng (chỉ đọc) đến
valuecủa phần tử có key bằngkey. Phiên bản này được sử dụng khi std::map là một đối tượngconst.
Đặc điểm
- Truy cập theo
key:at()cho phép bạn truy cập trực tiếpvaluecủa phần tử thông quakey. - Tham chiếu:
at()trả về tham chiếu, cho phép bạn thay đổi trực tiếp giá trị của phần tử (trừ phiên bảnconst). - Hai phiên bản: Phiên bản
constđược sử dụng cho các đối tượng std::mapconst, đảm bảo tính an toàn vềconst. - Ném ngoại lệ khi
keykhông tồn tại: Đây là điểm khác biệt chính giữaat()vàoperator[]. Nếukeykhông tồn tại trong std::map,at()sẽ ném ra ngoại lệ std::out_of_range. - Không thay đổi std::map (khi
keytồn tại): Khikeyđã tồn tại, việc gọiat()sẽ không thay đổi cấu trúc hay kích thước của std::map (ngoại trừ việc thay đổivaluethông qua tham chiếu trả về ở phiên bản non-const). - Phân biệt với
operator[]:operator[]sẽ chèn thêm 1 phần tử cókey-value(với value mặc định) nếu key chưa tồn tại,at()thì không làm thay đổi std::map và ném ra ngoại lệ out_of_range. - Độ phức tạp:
O(log n)- thời gian logarit, với n là số phần tử trong std::map.
Ví dụ
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, int> mymap = {
{"apple", 1},
{"banana", 2},
{"orange", 3}
};
// Truy cập và in ra value của phần tử có key "banana"
std::cout << "Value of banana: " << mymap.at("banana") << '\n'; // Output: Value of banana: 2
// Thay đổi value của phần tử có key "apple"
mymap.at("apple") = 10;
// Truy cập phần tử có key "grape" (không tồn tại)
try {
std::cout << mymap.at("grape") << '\n';
} catch (const std::out_of_range& oor) {
std::cerr << "Out of Range error: " << oor.what() << '\n'; // Output: Out of Range error: map::at: key not found
}
return 0;
}
Các hàm liên quan
| [] | Truy cập phần tử có key tương ứng trong std::map |
| find | Tìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::map |