Chuyển tới nội dung chính

std::multimap::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::multimap có key bằng với giá trị key cho trước. Không giống như std::map, std::multimap cho phép các phần tử có cùng key, do đó equal_range có thể trả về một phạm vi 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

  1. 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ằng key trong std::multimap.
  2. Kết hợp lower_bound()upper_bound(): equal_range() tương đương với việc gọi lower_bound()upper_bound() cùng một lúc.
  3. Không thay đổi std::multimap: equal_range() là một hàm const, nó không làm thay đổi nội dung hay trạng thái của std::multimap.
  4. Hữu ích cho std::multimap: equal_range() đặc biệt hữu ích với std::multimap vì nó cho phép tìm thấy tất cả các phần tử có cùng key.
  5. 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::multimap có key bằng key, equal_range() trả về một phạm vi rỗng (trong đó pair.firstpair.second bằng nhau).
  6. Độ phức tạp: Độ phức tạp của equal_range()O(log n), với n là số phần tử trong std::multimap.

Ví dụ

#include <iostream>
#include <map>

int main() {
std::multimap<int, std::string> mymultimap = {
{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 = mymultimap.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 = mymultimap.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::multimap
lower_boundTrả về một iterator trỏ đến phần tử đầu tiên trong std::multimap có key lớn hơn hoặc bằng giá trị key cho trước
upper_boundTrả về một iterator trỏ đến phần tử đầu tiên trong std::multimap có key lớn hơn giá trị key cho trước
findTìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::multimap