std::set::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 (range) các phần tử có giá trị bằng giá trị key
cho trước. Vì std::set chỉ chứa các phần tử duy nhất, phạm vi này sẽ chứa tối đa một phần tử.
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ử, mặc dù trong std::set phạm vi này sẽ luôn chứa tối đa một phần tử do tính duy nhất của các phần tử. - 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::set:
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::set. - Phân biệt với
find()
:find()
chỉ trả về iterator đến phần tử đầu tiên tìm thấy (hoặcend()
nếu không tìm thấy), trong khiequal_range()
trả về một phạm vi. Trong std::set,equal_range()
có thể cung cấp thông tin về vị trí mà phần tử sẽ được chèn vào nếu nó không tồn tại. - Độ 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::set.
Ví dụ
#include <iostream>
#include <set>
int main() {
std::set<int> myset = {10, 20, 30, 40, 50};
// Tìm phạm vi các phần tử có giá trị bằng 30
auto range = myset.equal_range(30);
if (range.first != range.second) {
std::cout << "Element 30 found at position: " << std::distance(myset.begin(), range.first) << '\n';
std::cout << "Value: " << *range.first << '\n';
// *range.second is undefined behavior
} else {
std::cout << "Element 30 not found\n";
}
// Tìm phạm vi các phần tử có giá trị bằng 35 (không tồn tại)
range = myset.equal_range(35);
if (range.first == range.second) {
std::cout << "Element 35 not found, would be inserted at position: " << std::distance(myset.begin(), range.first) << '\n';
}
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::set |
lower_bound | Trả về một iterator trỏ đến phần tử đầu tiên trong std::set 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::set 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::set |