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

std::unordered_map::cend

#include <unordered_map>

      const_iterator cend() const noexcept;
const_local_iterator cend(size_type n) const;

Trả về một const_iterator trỏ đến vị trí sau phần tử cuối cùng trong std::unordered_map. cend() là viết tắt của "constant end".

Tham số

  • cend() không có tham số nào trong trường hợp muốn lấy iterator trỏ đến cuối std::unordered_map.
  • cend(n) có tham số đầu vào là n để lấy iterator trỏ đến cuối của bucket thứ n.

Giá trị trả về

const_iterator

  • Trả về một const_iterator trỏ đến vị trí sau phần tử cuối cùng trong std::unordered_map. Đây là một vị trí "past-the-end". const_iterator chỉ cho phép đọc giá trị, không cho phép thay đổi.

const_local_iterator

  • Trả về một const_local_iterator trỏ đến vị trí sau phần tử cuối cùng trong bucket thứ n.

Đặc điểm

  1. Vị trí "past-the-end": cend() không trỏ đến một phần tử thực sự trong std::unordered_map, mà là một vị trí sau phần tử cuối cùng. Dereferencing (toán tử * hoặc ->) iterator này sẽ dẫn đến hành vi không xác định (undefined behavior).
  2. Chỉ đọc: Iterator trả về bởi cend() là const_iterator, nghĩa là bạn không thể thay đổi giá trị của các phần tử trong std::unordered_map thông qua iterator này.
  3. noexcept: cend() được đánh dấu là noexcept, nghĩa là nó được đảm bảo không ném ra ngoại lệ nào.
  4. So sánh với cbegin(): cbegin() trỏ đến một phần tử bất kỳ trong map (thường dùng để bắt đầu duyệt), trong khi cend() trỏ đến vị trí sau phần tử cuối cùng.
  5. Phân biệt với end(): end() trả về iterator (có thể đọc và ghi), trong khi cend() trả về const_iterator (chỉ đọc).
  6. Không thay đổi std::unordered_map: Gọi cend() không làm thay đổi nội dung của std::unordered_map.
  7. std::unordered_map rỗng: Nếu std::unordered_map rỗng thì cend() sẽ trả về giá trị giống cbegin().
  8. Độ phức tạp: O(1) - thời gian hằng số.

Ví dụ

#include <iostream>
#include <unordered_map>

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

std::cout << "myumap contains:\n";
for (auto cit = myumap.cbegin(); cit != myumap.cend(); ++cit) {
std::cout << cit->first << ": " << cit->second << '\n'; // Chỉ đọc giá trị, không thể thay đổi
}
// Output:
// myumap contains:
// orange: 3
// banana: 2
// apple: 1
// (thứ tự có thể khác)

return 0;
}

Kiểm tra map có rỗng hay không sử dụng cbegin()cend()

#include <iostream>
#include <unordered_map>

int main() {
std::unordered_map<int, std::string> myumap;

// Kiểm tra map có rỗng hay không sử dụng cbegin() và cend()
if (myumap.cbegin() == myumap.cend()) {
std::cout << "map is empty\n"; // Output: map is empty
}

return 0;
}

Các hàm liên quan

endTrả về một iterator trỏ đến vị trí sau phần tử cuối cùng trong std::unordered_map
cbeginTrả về một const_iterator trỏ đến phần tử đầu tiên trong std::unordered_map