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

std::map::crbegin

#include <map>

const_reverse_iterator crbegin() const noexcept;

Trả về một const_reverse_iterator trỏ đến phần tử cuối cùng trong std::map. crbegin() là viết tắt của "constant reverse begin".

Tham số

Không có tham số

Giá trị trả về

  • const_reverse_iterator: Trả về một const_reverse_iterator trỏ đến phần tử cuối cùng của std::map. const_reverse_iterator chỉ cho phép đọc giá trị, không cho phép thay đổi.

Đặc điểm

  1. Duyệt ngược và chỉ đọc: crbegin() cho phép bạn duyệt các phần tử theo thứ tự đảo ngược, bắt đầu từ phần tử cuối cùng (có key lớn nhất), nhưng chỉ được phép đọc, không được sửa đổi giá trị.
  2. noexcept: crbegin() được đánh dấu là noexcept, nghĩa là nó được đảm bảo không ném ra ngoại lệ nào.
  3. Kết hợp với crend(): crbegin() thường được sử dụng cùng với crend() để duyệt ngược qua toàn bộ std::map. crend() trả về const_reverse_iterator trỏ đến phần tử "past-the-end" ở phía trước phần tử đầu tiên (theo chiều duyệt thông thường).
  4. Phân biệt với rbegin(): rbegin() trả về reverse_iterator (có thể đọc và ghi nhưng không được thay đổi key), trong khi crbegin() trả về const_reverse_iterator (chỉ đọc).
  5. Không thay đổi std::map: Gọi crbegin() không làm thay đổi nội dung của std::map.
  6. Phần tử cuối cùng theo thứ tự:std::map lưu trữ các phần tử theo thứ tự của key, phần tử cuối cùng mà crbegin() trỏ tới là phần tử có key lớn nhất (theo tiêu chí so sánh của map).
  7. Độ phức tạp: O(1) - thời gian hằng số.

Ví dụ

#include <iostream>
#include <map>

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

std::cout << "mymap in reverse order (read-only):\n";
for (auto crit = mymap.crbegin(); crit != mymap.crend(); ++crit) {
std::cout << crit->first << ": " << crit->second << '\n'; // Chỉ đọc giá trị, không thể thay đổi
}
// Output:
// mymap in reverse order (read-only):
// orange: 3
// banana: 2
// apple: 1

return 0;
}

#include <iostream>
#include <map>
#include <algorithm>

int main() {
std::map<int, std::string> mymap = {
{1, "one"},
{2, "two"},
{3, "three"},
{4, "four"},
{5, "five"}
};

// Tìm key lớn nhất sử dụng crbegin()
auto it = mymap.crbegin();

if (it != mymap.crend()) {
std::cout << "Largest key: " << it->first << std::endl; // Output: Largest key: 5
}

return 0;
}

Các hàm liên quan

crendTrả về một const_reverse_iterator trỏ đến phần tử trước phần tử đầu tiên của std::map
beginTrả về một iterator trỏ đến phần tử đầu tiên trong std::map
rbeginTrả về một reverse_iterator trỏ đến phần tử cuối cùng trong std::map