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

std::unordered_multiset::equal_range

#include <unordered_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::unordered_multiset có giá trị bằng với giá trị key cho trước. Khác với std::unordered_set, std::unordered_multiset cho phép lưu trữ các phần tử trùng lặp, 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ầ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ó giá trị bằng key trong std::unordered_multiset.
  2. Không thay đổi std::unordered_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::unordered_multiset.
  3. Hữu ích cho std::unordered_multiset: equal_range() đặc biệt hữu ích với std::unordered_multiset vì nó cho phép tìm thấy tất cả các phần tử có cùng giá trị key.
  4. 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_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 và cùng bằng end()).
  5. Độ phức tạp: Độ phức tạp trung bình của equal_range()O(m) (với m là số phần tử bằng 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_multiset.

Ví dụ

#include <iostream>
#include <unordered_set>

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

// Tìm phạm vi các phần tử có giá trị bằng 30
auto range = myumset.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 (thứ tự có thể khác)

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