std::multiset::equal_range
#include <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::multiset có giá trị bằng với giá trị key
cho trước.
Tham số
key
- Giá trị cần tìm kiếm.
Giá trị trả về
std::pair<iterator, iterator>
(phiên bản không const):
Cặp iterator xác định phạm vi.std::pair<const_iterator, const_iterator>
(phiên bản const):
Cặp const_iterator xác định phạm vi.
Đặ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ằngkey
trong std::multiset. - Kết hợp
lower_bound()
vàupper_bound()
:equal_range()
tương đương với việc gọilower_bound()
vàupper_bound()
cùng một lúc. - Không thay đổi std::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::multiset. - Hữu ích cho std::multiset:
equal_range()
đặc biệt hữu ích với std::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::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). Phạm vi[pair.first, pair.second)
sẽ bao gồm tất cả các phần tử có giá trị bằngkey
trong std::multiset. Nếu không tìm thấy phần tử nào có giá trị bằngkey
,pair.first
vàpair.second
sẽ trỏ đến cùng một vị trí (vị trí mà phần tử có giá trị bằngkey
sẽ được chèn vào nếu có). - Độ phức tạp: Độ phức tạp của
equal_range()
làO(log n)
, với n là số phần tử trong std::multiset.
Ví dụ
#include <iostream>
#include <set>
int main() {
std::multiset<int> mymultiset = {10, 20, 30, 30, 30, 40, 50};
// Tìm phạm vi các phần tử có giá trị bằng 30
auto range = mymultiset.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 30
// Tìm phạm vi các phần tử có giá trị bằng 35 (không tồn tại)
range = mymultiset.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::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 |
find | Tìm kiếm một phần tử có giá trị bằng với giá trị cho trước trong std::multiset |