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

std::map::rbegin

#include <map>

      reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;

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

Tham số

Không có tham số

Giá trị trả về

  • iterator (phiên bản không const): Trả về một reverse_iterator có thể đọc và ghi, cho phép bạn thay đổi giá trị các phần tử khi duyệt ngược. Tuy nhiên, bạn không được phép thay đổi key của phần tử.
  • const_iterator (phiên bản const): Trả về một const_reverse_iterator, chỉ cho phép bạn đọc giá trị các phần tử, không thể thay đổi chúng. Phiên bản này được sử dụng khi std::map là một đối tượng const.

Đặc điểm

  1. Duyệt ngược: rbegin() 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).
  2. Dereferencing: Khi sử dụng reverse iterator, toán tử * (dereference) sẽ trả về giá trị của phần tử hiện tại mà iterator đang trỏ tới (phần tử cuối cùng khi bắt đầu với rbegin()). Toán tử -> cho phép truy cập đến keyvalue của phần tử đó.
  3. Toán tử ++: Toán tử ++ trên reverse iterator sẽ di chuyển iterator đến phần tử trước đó trong std::map (theo thứ tự thông thường).
  4. Kết hợp với rend(): rbegin() thường được sử dụng cùng với rend() để duyệt ngược qua toàn bộ std::map. rend() trả về reverse iterator trỏ đến phần tử "past-the-end" ở phía trước phần tử đầu tiên.
  5. noexcept: Cả hai phiên bản của rbegin() đều được đánh dấu là noexcept, nghĩa là chúng được đảm bảo không ném ra ngoại lệ nào.
  6. Không làm thay đổi map: Gọi rbegin() không làm thay đổi nội dung hay trạng thái của std::map.
  7. Phần tử cuối cùng theo thứ tự:std::map lưu trữ phần tử theo thứ tự của key, phần tử cuối cùng mà rbegin() trỏ tới sẽ là phần tử có key lớn nhất (theo tiêu chí so sánh của map).
  8. Độ 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:\n";
for (auto rit = mymap.rbegin(); rit != mymap.rend(); ++rit) {
std::cout << rit->first << ": " << rit->second << '\n';
}
// Output:
// mymap in reverse order:
// 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 phần tử đầu tiên từ cuối lên có key lớn hơn 2
auto it = std::find_if(mymap.rbegin(), mymap.rend(), [](const auto& pair){ return pair.first > 2; });

if (it != mymap.rend()) {
std::cout << "First element from the end with key greater than 2: " << it->first << '\n'; // Output: 5
}

return 0;
}

Các hàm liên quan

rendTrả về một 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
endTrả về một iterator trỏ đến vị trí sau phần tử cuối cùng trong std::map