std::map::equal_range
#include <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::map có key
bằng với giá trị key
cho trước. Vì std::map lưu trữ các key
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>
(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::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áckey
. - 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::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::map. - Hữu ích cho std::map: Mặc dù
equal_range()
có thể được sử dụng với std::set và std::multiset nhưng nó đặc biệt hữu ích với std::multiset vì std::multiset cho phép các phần tử trùng lặp. Trong std::map,equal_range()
chủ yếu được dùng để kiểm tra sự tồn tại và xác định vị trí có thể chèn. - 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::map có
key
bằngkey
,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 của
equal_range()
làO(log n)
, với n là số phần tử trong std::map.
Ví dụ
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> mymap = {
{10, "ten"},
{20, "twenty"},
{30, "thirty"},
{40, "forty"},
{50, "fifty"}
};
// Tìm phạm vi các phần tử có key bằng 30
auto range = mymap.equal_range(30);
if (range.first != range.second) {
std::cout << "Element with key 30 found. Value: " << range.first->second << '\n'; // Output: Element with key 30 found. Value: thirty
// *range.second is undefined behavior
} else {
std::cout << "Element with key 30 not found\n";
}
// Tìm phạm vi các phần tử có key bằng 35 (không tồn tại)
range = mymap.equal_range(35);
if (range.first == range.second) {
std::cout << "Element with key 35 not found, would be inserted at a position\n"; // Output: Element with key 35 not found, would be inserted at a position
}
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::map |
lower_bound | Trả về một iterator trỏ đến phần tử đầu tiên trong std::map có key 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::map có key lớn hơn giá trị key cho trước |
[] | Truy cập phần tử có key tương ứng trong std::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::map |