Multimap ใน C++ STL คืออะไร?
Multimap เป็น associative container ที่คล้ายกับ map แต่อนุญาตให้มีหลายค่าผูกกับคีย์เดียวกันได้ ข้อมูลจัดเรียงอัตโนมัติตามคีย์
ฟังก์ชัน multimap::cbegin() คืออะไร?
ฟังก์ชัน multimap::cbegin() ประกาศอยู่ใน header <map> คืนค่า constant iterator (const_iterator) ชี้ไปยังองค์ประกอบแรกของ multimap container Iterator ที่คืนมาเป็น constant ไม่สามารถใช้แก้ไขข้อมูลได้ ใช้ได้แค่การ遍历 (traverse) เท่านั้น
รูปแบบไวยากรณ์ (Syntax)
multi.cbegin();
พารามิเตอร์
ไม่รับพารามิเตอร์
ค่าที่ส่งคืน
คืนค่า const_iterator ชี้ไปยังองค์ประกอบแรกของ container
ฟังก์ชัน multimap::cend() คืออะไร?
ฟังก์ชัน multimap::cend() ประกาศอยู่ใน header <map> คืนค่า constant iterator ชี้ไปยังตำแหน่ง หลังองค์ประกอบสุดท้าย (past-the-end) ของ multimap container ใช้เป็นจุดสิ้นสุดในการ遍历
รูปแบบไวยากรณ์ (Syntax)
multi.cend();
พารามิเตอร์
ไม่รับพารามิเตอร์
ค่าที่ส่งคืน
คืนค่า const_iterator ชี้ไปยังตำแหน่ง past-the-end
ตัวอย่างการใช้งาน
#include <bits/stdc++.h>
using namespace std;
int main() {
// สร้าง container
multimap<int, int> mul;
// แทรกข้อมูลด้วย emplace_hint
mul.emplace_hint(mul.begin(), 1, 10);
mul.emplace_hint(mul.begin(), 2, 20);
mul.emplace_hint(mul.begin(), 2, 30);
mul.emplace_hint(mul.begin(), 1, 40);
mul.emplace_hint(mul.begin(), 1, 50);
mul.emplace_hint(mul.begin(), 5, 60);
auto it = mul.cbegin();
cout << "First element in the multimap is: ";
cout << "{" << it->first << ", " << it->second << "}\n";
cout << "\nElements in multimap is: \n";
cout << "KEY\tELEMENT\n";
for (auto i = mul.cbegin(); i != mul.cend(); i++) {
cout << i->first << "\t" << i->second << endl;
}
return 0;
}
ผลลัพธ์
First element in the multimap is: {1, 50}
Elements in multimap is:
KEY ELEMENT
1 50
1 40
1 10
2 30
2 20
5 60
ข้อดีของการใช้ cbegin()/cend()
- Const-correctness - ป้องกันการแก้ไขข้อมูลโดยไม่ได้ตั้งใจขณะ遍历
- API clarity - แสดงเจตนาการอ่านอย่างเดียว ช่วยให้โค้ดอ่านง่ายขึ้น
- Optimization - Compiler อาจ optimize ได้ดีกว่าเมื่อรู้ว่า iterator เป็น const
สรุป
cbegin() และ cend() เป็น constant version ของ begin() และ end() ใช้สำหรับ read-only traversal ของ multimap เป็น best practice เมื่อไม่ต้องการแก้ไขข้อมูลขณะวนลูป