std::unordered_multimap::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_multimap có key bằng với giá trị key
cho trước. Vì std::unordered_multimap cho phép các key trùng lặp, phạm vi trả về có thể chứa nhiều 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ử, cho phép bạn truy cập tất cả các phần tử có key bằngkey
trong std::unordered_multimap. - Không thay đổi std::unordered_multimap:
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_multimap. - Hữu ích cho std::unordered_multimap: equal_range() đặc biệt hữu ích với std::unordered_multimap vì nó cho phép tìm thấy tất cả các phần tử có cùng 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_multimap 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). - Độ 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 với 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_multimap.
Ví dụ
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_multimap<int, std::string> myumm = {
{10, "ten"},
{20, "twenty"},
{30, "thirty"},
{30, "another thirty"},
{30, "one more thirty"},
{40, "forty"},
{50, "fifty"}
};
// Tìm phạm vi các phần tử có key bằng 30
auto range = myumm.equal_range(30);
std::cout << "Elements with key 30:\n";
for (auto it = range.first; it != range.second; ++it) {
std::cout << it->first << ": " << it->second << '\n';
}
// Output:
// Elements with key 30:
// 30: thirty
// 30: another thirty
// 30: one more thirty
// Tìm phạm vi các phần tử có key bằng 35 (không tồn tại)
range = myumm.equal_range(35);
if (range.first == range.second) {
std::cout << "No elements with key 35 found\n"; // Output: No elements with key 35 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_multimap |
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_multimap |
begin | Trả về một iterator trỏ đến phần tử đầu tiên trong std::unordered_multimap |