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

std::unordered_map::equal_range

#include <unordered_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::unordered_map có key bằng với giá trị key cho trước. Vì key trong std::unordered_map là 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>

  • 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ử, mặc dù trong std::unordered_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ác key.
  2. Không thay đổi std::unordered_map: 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_map.
  3. Ít hữu dụng hơn với std::unordered_map: Do tính duy nhất của key trong std::unordered_map, equal_range() thường ít được sử dụng hơn so với std::unordered_multimap (nơi nó có thể trả về phạm vi chứa nhiều phần tử).
  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_map có key 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. Thay thế cho find(): Trong std::unordered_map, equal_range() có thể được dùng thay cho find() để kiểm tra sự tồn tại của key. Tuy nhiên find thường được ưu tiên hơn vì cú pháp rõ ràng hơn.
  6. Độ phức tạp: Độ phức tạp trung bình của equal_range()O(1), trường hợp xấu nhất là O(n), với n là số phần tử trong std::unordered_map.

Ví dụ

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
std::unordered_map<std::string, int> myumap = {
{"apple", 1},
{"banana", 2},
{"orange", 3}
};

// Tìm phạm vi các phần tử có key bằng "banana"
auto range = myumap.equal_range("banana");

if (range.first != myumap.end()) {
std::cout << "Element with key 'banana' found. Value: " << range.first->second << '\n'; // Output: Element with key 'banana' found. Value: 2
// *range.second is undefined behavior
} else {
std::cout << "Element with key 'banana' not found\n";
}

// Tìm phạm vi các phần tử có key bằng "grape" (không tồn tại)
range = myumap.equal_range("grape");

if (range.first == range.second) {
std::cout << "Element with key 'grape' not found\n"; // Output: Element with key 'grape' not 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::unordered_map
findTìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::unordered_map
[]Truy cập phần tử có key tương ứng
atTruy cập phần tử có key cho trước