std::map::at
#include <map>
mapped_type& at(const key_type& key);
const mapped_type& at(const key_type& key) const;
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.
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
value
củ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
value
củ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ếpvalue
củ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
key
không tồn tại: Đây là điểm khác biệt chính giữaat()
vàoperator[]
. Nếukey
khô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
key
tồ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 đổivalue
thô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 |