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

std::multiset::equal_range

#include <set>

            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::multiset có giá trị bằng với giá trị key cho trước.

Tham số

key

  • Giá trị 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

  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ó giá trị bằng key trong std::multiset.
  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::multiset: 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::multiset.
  4. Hữu ích cho std::multiset: equal_range() đặc biệt hữu ích với std::multiset vì nó cho phép tìm thấy tất cả các phần tử có cùng giá trị 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::multiset có giá trị bằng key, equal_range() trả về một phạm vi rỗng (trong đó pair.firstpair.second bằng nhau). Phạm vi [pair.first, pair.second) sẽ bao gồm tất cả các phần tử có giá trị bằng key trong std::multiset. Nếu không tìm thấy phần tử nào có giá trị bằng key, pair.firstpair.second sẽ trỏ đến cùng một vị trí (vị trí mà phần tử có giá trị bằng key sẽ được chèn vào nếu có).
  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::multiset.

Ví dụ

#include <iostream>
#include <set>

int main() {
std::multiset<int> mymultiset = {10, 20, 30, 30, 30, 40, 50};

// Tìm phạm vi các phần tử có giá trị bằng 30
auto range = mymultiset.equal_range(30);

std::cout << "Elements equal to 30:";
for (auto it = range.first; it != range.second; ++it) {
std::cout << ' ' << *it;
}
std::cout << '\n'; // Output: Elements equal to 30: 30 30 30

// Tìm phạm vi các phần tử có giá trị bằng 35 (không tồn tại)
range = mymultiset.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::multiset
lower_boundTrả về một iterator trỏ đến phần tử đầu tiên trong std::multiset có giá trị 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::multiset có giá trị lớn hơn giá trị key cho trước
findTìm kiếm một phần tử có giá trị bằng với giá trị cho trước trong std::multiset