std::multiset::find
#include <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::multiset.
Tham số
key
- Giá trị của phần tử cần tìm kiếm.
Giá trị trả về
- iterator (phiên bản không const): Trả về iterator trỏ đến một trong các phần tử có giá trị bằng
key
nếu tìm thấy. Nếu không tìm thấy, trả vềend()
. - const_iterator (phiên bản const): Trả về const_iterator trỏ đến một trong các phần tử có giá trị bằng
key
nếu tìm thấy. Nếu không tìm thấy, trả vềcend()
. Phiên bản này được sử dụng khi std::multiset là một đối tượngconst
.
Đặ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ảnconst
). - 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). - Không thay đổi std::multiset:
find()
là một hàmconst
, nó không làm thay đổi nội dung hay trạng thái của std::multiset. - Có thể trả về iterator trỏ đến bất kỳ phần tử nào có giá trị bằng
key
: Vì std::multiset cho phép các phần tử trùng lặp,find()
có thể trả về iterator trỏ đến bất kỳ phần tử nào trong số các phần tử có giá trị bằngkey
. Không có đảm bảo nào về việc nó sẽ trả về phần tử đầu tiên, cuối cùng, hay phần tử ở giữa. - Không đảm bảo tính duy nhất: Không giống như std::set, std::multiset có thể chứa các phần tử trùng lặp. Do đó,
find()
có thể trả về iterator trỏ đến bất kỳ phần tử nào có giá trị bằngkey
. - Độ 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::multiset. Nhờ cấu trúc cây tìm kiếm nhị phân, việc tìm kiếm trong std::multiset rất hiệu quả.
Ví dụ
#include <iostream>
#include <set>
int main() {
std::multiset<int> mymultiset = {10, 20, 30, 20, 40, 50};
// Tìm kiếm phần tử có giá trị 30
auto it = mymultiset.find(30);
if (it != mymultiset.end()) {
std::cout << "Element found: " << *it << '\n'; // Output: Element found: 30
} else {
std::cout << "Element not found\n";
}
// Tìm kiếm phần tử có giá trị 60 (không tồn tại)
it = mymultiset.find(60);
if (it != mymultiset.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
equal_range | Trả về một cặp iterator xác định phạm vi các phần tử trong std::multiset có giá trị bằng với giá trị key cho trước |
count | Đếm số lượng phần tử có giá trị bằng với giá trị cho trước trong std::multiset |
lower_bound | Trả về một iterator trỏ đến phần tử đầu tiên trong std::multiset có giá trị 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::multiset có giá trị lớn hơn giá trị key cho trước |