std::unordered_set::find
#include <unordered_set>
iterator find(const key_type& key);
const_iterator find(const key_type& key) const;
Tìm kiếm một phần tử có giá trị bằng với giá trị cho trước trong std::unordered_set.
Tham số
key
- Giá trị của phần tử cần tìm kiếm.
Giá trị trả về
iterator
- Trả về iterator trỏ đến phần tử có giá trị 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ử. Nếu không tìm thấy, trả về
end()
(phiên bản không const).
const_iterator
- Trả về const_iterator trỏ đến phần tử có giá trị bằng key 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::unordered_set là một đối tượngconst
(phiên bản const).
Đặc điểm
- Tìm kiếm theo giá trị:
find()
tìm kiếm phần tử dựa trên giá trị của nó, không phải dựa trên vị trí. - 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ó giá trị bằngkey
,find()
sẽ trả vềend()
(hoặccend()
cho phiên bản const). - Phân biệt với
count()
:count()
đếm số lần xuất hiện của một giá trị, 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::unordered_set,count()
luôn trả về 0 hoặc 1. - Không thay đổi std::unordered_set:
find()
là một hàmconst
, nó không làm thay đổi nội dung hay trạng thái của std::unordered_set. - Tìm kiếm duy nhất: Vì std::unordered_set chỉ chứa các phần tử duy nhất,
find()
chỉ trả về iterator đến phần tử đầu tiên có giá trị bằng key (nếu tìm thấy). - Độ phức tạp: Độ phức tạp trung bình của
find()
làO(1)
- thời gian hằng số. Trong trường hợp xấu nhất (xung đột hash nhiều), độ phức tạp có thể lên tớiO(n)
, với n là số phần tử trong std::unordered_set.
Ví dụ
#include <iostream>
#include <unordered_set>
#include <string>
int main() {
std::unordered_set<std::string> myset = {"apple", "banana", "orange"};
// Tìm kiếm phần tử có giá trị "banana"
auto it = myset.find("banana");
if (it != myset.end()) {
std::cout << "Element found: " << *it << '\n'; // Output: Element found: banana
} else {
std::cout << "Element not found\n";
}
// Tìm kiếm phần tử có giá trị "grape" (không tồn tại)
it = myset.find("grape");
if (it != myset.end()) {
std::cout << "Element found: " << *it << '\n';
} else {
std::cout << "Element not found\n"; // Output: Element not found
}
return 0;
}
Các hàm liên quan
count | Đếm số lượng phần tử có giá trị bằng với giá trị cho trước trong std::unordered_set |
equal_range | Trả về một cặp iterator xác định phạm vi các phần tử trong std::unordered_set có giá trị bằng với giá trị key cho trước |
begin | Trả về một iterator trỏ đến phần tử đầu tiên trong std::unordered_set |