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