std::map::find
#include <map>
iterator find(const key_type& key);
const_iterator find(const key_type& key) const;
Tìm kiếm một phần tử có key bằng với giá trị key
cho trước trong std::map.
Tham số
key
- Giá trị của
key
cần tìm kiếm.
Giá trị trả về
iterator
- (phiên bản không const): Trả về iterator trỏ đến phần tử có key bằng
key
nếu tìm thấy. Iterator này cho phép đọc và ghi giá trị của phần tử (nhưng không được thay đổikey
). Nếu không tìm thấy, trả vềend()
.
const_iterator
- (phiên bản const): Trả về const_iterator trỏ đến phần tử có
key
bằngkey
nếu tìm thấy. Iterator này chỉ cho phép đọc giá trị, không cho phép thay đổi. Nếu không tìm thấy, trả vềcend()
. Phiên bản này được sử dụng khi std::map là một đối tượngconst
.
Đặc điểm
- Tìm kiếm theo key:
find()
tìm kiếm phần tử dựa trên giá trị củakey
, không phải dựa trên vị trí hay value. - Trả về
end()
nếu không tìm thấy: Nếu không tìm thấy phần tử nào cókey
bằngkey
,find()
sẽ trả vềend()
(hoặccend()
cho phiên bảnconst
). - Phân biệt với
count()
:count()
đếm số lần xuất hiện của mộtkey
, trong khifind()
trả về iterator trỏ đến phần tử đầu tiên tìm thấy (hoặcend()
nếu không tìm thấy). Trong std::map,count()
luôn trả về 0 hoặc 1 vìkey
là duy nhất. - Không thay đổi std::map:
find()
là một hàmconst
, nó không làm thay đổi nội dung hay trạng thái của std::map. - Tìm kiếm duy nhất: Vì std::map đảm bảo các
key
là duy nhất,find()
chỉ trả về iterator đến phần tử đầu tiên cókey
bằngkey
(nếu tìm thấy). - Độ phức tạp: Độ phức tạp của
find()
làO(log n)
, với n là số phần tử trong std::map. Nhờ cấu trúc cây tìm kiếm nhị phân, việc tìm kiếm trong std::map rất hiệu quả.
Ví dụ
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, int> mymap = {
{"apple", 1},
{"banana", 2},
{"orange", 3}
};
// Tìm kiếm phần tử có key "banana"
auto it = mymap.find("banana");
if (it != mymap.end()) {
std::cout << "Element found: key = " << it->first << ", value = " << it->second << '\n'; // Output: Element found: key = banana, value = 2
} else {
std::cout << "Element not found\n";
}
// Tìm kiếm phần tử có key "grape" (không tồn tại)
it = mymap.find("grape");
if (it != mymap.end()) {
std::cout << "Element found: key = " << it->first << ", value = " << it->second << '\n';
} else {
std::cout << "Element not found\n"; // Output: Element 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 |
count | Đếm số lượng phần tử có key bằng với giá trị key cho trước trong std::map |
lower_bound | Trả về một iterator trỏ đến phần tử đầu tiên trong std::map có key lớn hơn hoặc bằng giá trị key cho trước |
upper_bound | Trả về một iterator trỏ đến phần tử đầu tiên trong std::map có key lớn hơn giá trị key cho trước |