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

std::unordered_multimap::find

#include <unordered_map>

      iterator find(const key_type& key);
const_iterator find(const key_type& key) const;

Tìm kiếm một phần tử có key bằng với giá trị key cho trước trong std::unordered_multimap.

Tham số

key

  • Giá trị của key cần tìm kiếm.

Giá trị trả về

iterator

  • Trả về iterator trỏ đến phần tử có key bằng key nếu tìm thấy. Iterator này cho phép đọc và ghi giá trị của phần tử. Nếu không tìm thấy, trả về end() (phiên bản không const).

const_iterator

  • Trả về const_iterator trỏ đến một trong các phần tử có key bằng key nếu tìm thấy. Iterator này chỉ cho phép đọc giá trị, không cho phép thay đổi. Nếu không tìm thấy, trả về cend(). Phiên bản này được sử dụng khi std::unordered_multimap là một đối tượng const (phiên bản const).

Đặc điểm

  1. Tìm kiếm theo key: find() tìm kiếm phần tử dựa trên giá trị của key, không phải dựa trên vị trí hay value.
  2. Trả về end() nếu không tìm thấy: Nếu không tìm thấy phần tử nào có key bằng key, find() sẽ trả về end() (hoặc cend() cho phiên bản const).
  3. Phân biệt với count(): count() đếm số lần xuất hiện của một key, trong khi find() trả về iterator trỏ đến phần tử đầu tiên tìm thấy (hoặc end() nếu không tìm thấy).
  4. Không thay đổi std::unordered_multimap: find() 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_multimap.
  5. Không đảm bảo trả về phần tử đầu tiên: Vì std::unordered_multimap cho phép các key trùng lặp, find() có thể trả về iterator trỏ đến bất kỳ phần tử nào trong số các phần tử có key bằng key. Không có đảm bảo nào về việc nó sẽ trả về phần tử đầu tiên được chèn vào.
  6. Độ phức tạp: Độ phức tạp trung bình của find()O(1) - thời gian hằng số. Trong trường hợp xấu nhất (xung đột hash nhiều), độ phức tạp có thể lên tới O(n), với n là số phần tử trong std::unordered_multimap.

Ví dụ

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

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

// Tìm kiếm phần tử có key "banana"
auto it = myumm.find("banana");

if (it != myumm.end()) {
std::cout << "Element found: key = " << it->first << ", value = " << it->second << '\n'; // Output: Element found: key = banana, value = 2
} else {
std::cout << "Element not found\n";
}

// Tìm kiếm phần tử có key "grape" (không tồn tại)
it = myumm.find("grape");

if (it != myumm.end()) {
std::cout << "Element found: key = " << it->first << ", value = " << it->second << '\n';
} else {
std::cout << "Element not found\n"; // Output: Element not found
}

return 0;
}

Các hàm liên quan

equal_rangeTrả về một cặp iterator xác định phạm vi các phần tử trong std::unordered_multimap có key bằng với giá trị key cho trước
countĐếm số lượng phần tử có key bằng với giá trị key cho trước trong std::unordered_multimap