std::unordered_set::equal_range
#include <unordered_set>
Trả về một cặp iterator xác định phạm vi các phần tử trong std::unordered_set có giá trị bằng với giá trị key cho trước. Vì std::unordered_set lưu trữ các phần tử duy nhất, phạm vi này sẽ chỉ chứa tối đa một phần tử.
std::pair<iterator, iterator> equal_range(const key_type& key);
std::pair<const_iterator, const_iterator> equal_range(const key_type& key) const;
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ử. Tuy nhiên, trong std::unordered_set, phạm vi này sẽ chỉ 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()(trong trường hợp này luôn bằngfind()) vàupper_bound()cùng một lúc. Tuy nhiên,lower_bound()vàupper_bound()không tồn tại trong std::unordered_set. - Không thay đổi std::unordered_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::unordered_set. - 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_set có giá trị bằng
key,equal_range()trả về một phạm vi rỗng (trong đópair.firstvàpair.secondbằng nhau và cùng bằngend()). - Ít hữu dụng hơn với std::unordered_set: Do tính duy nhất của các phần tử trong std::unordered_set,
equal_range()không mang lại nhiều lợi ích như trong std::multiset (nơi nó có thể trả về phạm vi chứa nhiều phần tử trùng lặp). Trong hầu hết các trường hợp,find()sẽ phù hợp hơn khi sử dụng với std::unordered_set. - Độ phức tạp: Độ phức tạp trung bình của
equal_range()làO(1), trường hợp xấu nhất làO(n), với n là số phần tử trong std::unordered_set.
Ví dụ
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_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 != myset.end()) {
std::cout << "Element 30 found\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\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_set |
| 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_set |