std::map::rbegin
#include <map>
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".
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
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
keycủ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
- 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ókeylớn nhất). - 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ớirbegin()). Toán tử->cho phép truy cập đếnkeyvàvaluecủa phần tử đó. - 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). - Kết hợp với
rend():rbegin()thường được sử dụng cùng vớirend()để 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. - 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. - 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. - Phần tử cuối cùng theo thứ tự: Vì 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ókeylớn nhất (theo tiêu chí so sánh của map). - Độ 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
| rend | Trả về một reverse_iterator trỏ đến phần tử trước phần tử đầu tiên của std::map |
| begin | Trả về một iterator trỏ đến phần tử đầu tiên trong std::map |
| end | Trả về một iterator trỏ đến vị trí sau phần tử cuối cùng trong std::map |