Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ฟังก์ชัน multimap::rend() ใน C++ STL

Multimap ใน C++ STL คืออะไร?

Multimap เป็น associative container ที่คล้ายกับ map แต่อนุญาตให้มีหลายค่าผูกกับคีย์เดียวกันได้ ข้อมูลจัดเรียงอัตโนมัติตามคีย์

ฟังก์ชัน multimap::rend() คืออะไร?

ฟังก์ชัน multimap::rend() (reverse end) ประกาศอยู่ใน header <map> คืนค่า reverse iterator ชี้ไปยังตำแหน่ง ก่อนองค์ประกอบแรก (preceding the first element) ใช้เป็นจุดสิ้นสุด (end condition) ในการ遍历แบบย้อนกลับ

รูปแบบไวยากรณ์ (Syntax)

multiMap_name.rend();

พารามิเตอร์

ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ

ค่าที่ส่งคืน (Return Value)

คืนค่า reverse_iterator ชี้ไปยังตำแหน่งก่อนองค์ประกอบแรก

ตัวอย่างการใช้งาน

#include <bits/stdc++.h>
using namespace std;

int main() {
    multimap<int, int> mul;
    
    // แทรกข้อมูล
    mul.insert({1, 10});
    mul.insert({2, 20});
    mul.insert({3, 30});
    mul.insert({4, 40});
    mul.insert({5, 50});
    
    // แสดงข้อมูลทั้งหมดแบบ reverse (ใช้ rbegin และ rend คู่กัน)
    cout << "\nElements in multimap is: \n";
    cout << "KEY\tELEMENT\n";
    for (auto it = mul.rbegin(); it != mul.rend(); ++it) {
        cout << it->first << '\t' << it->second << '\n';
    }
    
    return 0;
}

ผลลัพธ์

Elements in multimap is:
KEY	ELEMENT
5	50
4	40
3	30
2	20
1	10

การใช้งานร่วมกับ rbegin()

rbegin() และ rend() ต้องใช้คู่กันเสมอสำหรับ reverse traversal:

// รูปแบบมาตรฐาน
for (auto it = mul.rbegin(); it != mul.rend(); ++it) {
    // process *it
}

// หรือใช้ range-based for (C++11) กับ reverse iterator
for (auto it = mul.rbegin(); it != mul.rend(); ++it) {
    cout << it->first << ": " << it->second << endl;
}

สรุป

rend() เป็น iterator สำหรับ marking จุดสิ้นสุดของ reverse traversal ต้องใช้คู่กับ rbegin() เสมอ ไม่สามารถ dereference rend() ได้ (จะเกิด undefined behavior) เหมือนกับ end() สำหรับ forward traversal