std::unordered_map::equal_range
#include <unordered_map>
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_map có key bằng với giá trị key
cho trước. Vì key trong std::unordered_map là duy nhất, phạm vi này sẽ chỉ chứa tối đa một phần tử.
Tham số
key
- Giá trị của key 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ử, mặc dù trong std::unordered_map 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 key. - Không thay đổi std::unordered_map:
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_map. - Ít hữu dụng hơn với std::unordered_map: Do tính duy nhất của key trong std::unordered_map,
equal_range()
thường ít được sử dụng hơn so với std::unordered_multimap (nơi nó có thể trả về phạm vi chứa nhiều phần tử). - 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_map có key 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()
). - Thay thế cho
find()
: Trong std::unordered_map,equal_range()
có thể được dùng thay chofind()
để kiểm tra sự tồn tại của key. Tuy nhiên find thường được ưu tiên hơn vì cú pháp rõ ràng hơn. - Độ 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_map.
Ví dụ
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::unordered_map<std::string, int> myumap = {
{"apple", 1},
{"banana", 2},
{"orange", 3}
};
// Tìm phạm vi các phần tử có key bằng "banana"
auto range = myumap.equal_range("banana");
if (range.first != myumap.end()) {
std::cout << "Element with key 'banana' found. Value: " << range.first->second << '\n'; // Output: Element with key 'banana' found. Value: 2
// *range.second is undefined behavior
} else {
std::cout << "Element with key 'banana' not found\n";
}
// Tìm phạm vi các phần tử có key bằng "grape" (không tồn tại)
range = myumap.equal_range("grape");
if (range.first == range.second) {
std::cout << "Element with key 'grape' not found\n"; // Output: Element with key 'grape' not found
}
return 0;
}
Các hàm liên quan
count | Đếm số lượng phần tử có key bằng với giá trị key cho trước trong std::unordered_map |
find | Tìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::unordered_map |
[] | Truy cập phần tử có key tương ứng |
at | Truy cập phần tử có key cho trước |