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

std::set::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 (range) các phần tử có giá trị bằng giá trị key cho trước. Vì std::set chỉ chứa các phần tử duy nhất, phạm vi này sẽ chứa tối đa một phần tử.

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ử, mặc dù trong std::set 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 phần tử.
  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::set: 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::set.
  4. Phân biệt với find(): find() chỉ trả về iterator đến phần tử đầu tiên tìm thấy (hoặc end() nếu không tìm thấy), trong khi equal_range() trả về một phạm vi. Trong std::set, equal_range() có thể cung cấp thông tin về vị trí mà phần tử sẽ được chèn vào nếu nó không tồn tại.
  5. Độ 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::set.

Ví dụ

#include <iostream>
#include <set>

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

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

if (range.first != range.second) {
std::cout << "Element 30 found at position: " << std::distance(myset.begin(), range.first) << '\n';
std::cout << "Value: " << *range.first << '\n';
// *range.second is undefined behavior
} else {
std::cout << "Element 30 not found\n";
}

// Tìm phạm vi các phần tử có giá trị bằng 35 (không tồn tại)
range = myset.equal_range(35);

if (range.first == range.second) {
std::cout << "Element 35 not found, would be inserted at position: " << std::distance(myset.begin(), range.first) << '\n';
}

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::set
lower_boundTrả về một iterator trỏ đến phần tử đầu tiên trong std::set 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::set 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::set