set::find(k) tìm kiếm khóa k trong set, trả về iterator trỏ đến phần tử nếu tìm thấy, ngược lại trả về end().
Đặc điểm
- Độ phức tạp: O(log n).
- Không sửa đổi container.
- Vì set chỉ chứa key duy nhất,
findtối đa trả về 1 phần tử. - Iterator trả về là
const– không thể sửa key qua iterator.
Ví dụ cơ bản
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> s = {7, 6, 1, 4, 2, 9, 10};
auto it = s.find(6);
if (it != s.end()) {
cout << "Found: " << *it << endl; // 6
// In từ 6 đến cuối
cout << "Elements from 6: ";
for (; it != s.end(); ++it) cout << *it << ' '; // 6 7 9 10
cout << endl;
} else {
cout << "Not found\n";
}
// Kiểm tra tồn tại
cout << "Has 5? " << (s.find(5) != s.end()) << endl; // 0
cout << "Has 9? " << (s.find(9) != s.end()) << endl; // 1
return 0;
}
Kết quả
Found: 6 Elements from 6: 6 7 9 10 Has 5? 0 Has 9? 1
find() vs count() vs lower_bound()
| Hàm | Trả về | Dùng khi |
|---|---|---|
find(k) | iterator (hoặc end()) | Cần iterator để duyệt tiếp, hoặc lấy giá trị (map) |
count(k) | 0 hoặc 1 (set), ≥0 (multiset) | Chỉ cần biết có/không (bool) |
lower_bound(k) | iterator ≥ k | Cần tìm khoảng, chèn hint, hoặc key không chính xác |
Ứng dụng với Map
Với map, find trả về iterator đến pair<const Key, Value> – rất hữu ích để lấy value:
map<string, int> m = {{"Alice", 25}, {"Bob", 30}};
auto it = m.find("Alice");
if (it != m.end()) cout << it->second; // 25
Lưu ý
- Không dùng
operator[]trênset(không có). findkhông làm thay đổi container – an toàn choconst set.- C++20:
contains(k)trả về bool – thay thếfind(k) != end().