std::unordered_multiset::equal_range
#include <unordered_set>
std::pair<iterator, iterator> equal_range(const key_type& key);
std::pair<const_iterator, const_iterator> equal_range(const key_type& key) const;
Trả về một cặp iterator xác định phạm vi các phần tử trong std::unordered_multiset có giá trị bằng với giá trị key
cho trước. Khác với std::unordered_set, std::unordered_multiset cho phép lưu trữ các phần tử trùng lặp, do đó equal_range()
có thể trả về một phạm vi chứa nhiều phần tử.
Tham số
key
- Giá trị cần tìm kiếm.
Giá trị trả về
std::pair<iterator, iterator>
- Cặp iterator xác định phạm vi (phiên bản không const).
std::pair<const_iterator, const_iterator>
- Cặp const_iterator xác định phạm vi (phiên bản const).
Đặc điểm
- Phạm vi phần tử:
equal_range()
trả về một phạm vi các phần tử, cho phép bạn truy cập tất cả các phần tử có giá trị bằng key trong std::unordered_multiset. - Không thay đổi std::unordered_multiset:
equal_range()
là một hàmconst
, nó không làm thay đổi nội dung hay trạng thái của std::unordered_multiset. - Hữu ích cho std::unordered_multiset:
equal_range()
đặc biệt hữu ích với std::unordered_multiset vì nó cho phép tìm thấy tất cả các phần tử có cùng giá trịkey
. - Phạm vi rỗng nếu không tìm thấy: Nếu không có phần tử nào trong std::unordered_multiset có giá trị bằng
key
,equal_range()
trả về một phạm vi rỗng (trong đópair.first
vàpair.second
bằng nhau và cùng bằngend()
). - Độ phức tạp: Độ phức tạp trung bình của
equal_range()
làO(m)
(với m là số phần tử bằng giá trịkey
), trường hợp xấu nhất làO(n)
với n là số phần tử trong std::unordered_multiset.
Ví dụ
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_multiset<int> myumset = {10, 20, 30, 20, 40, 30, 50};
// Tìm phạm vi các phần tử có giá trị bằng 30
auto range = myumset.equal_range(30);
std::cout << "Elements equal to 30:";
for (auto it = range.first; it != range.second; ++it) {
std::cout << ' ' << *it;
}
std::cout << '\n'; // Output: Elements equal to 30: 30 30 (thứ tự có thể khác)
// Tìm phạm vi các phần tử có giá trị bằng 35 (không tồn tại)
range = myumset.equal_range(35);
if (range.first == range.second) {
std::cout << "Element 35 not found\n"; // Output: Element 35 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_multiset |
find | Tìm kiếm một phần tử có giá trị bằng với giá trị cho trước trong std::unordered_multiset |
begin | Trả về một iterator trỏ đến phần tử đầu tiên trong std::unordered_multiset |