Multimap ใน C++ STL คืออะไร?
Multimap เป็น associative container ที่คล้ายกับ map แต่อนุญาตให้มีหลายค่าผูกกับคีย์เดียวกันได้ ข้อมูลจัดเรียงอัตโนมัติตามคีย์
ฟังก์ชัน multimap::get_allocator() คืออะไร?
ฟังก์ชัน multimap::get_allocator() เป็นฟังก์ชันในตัวของ C++ STL ประกาศอยู่ใน header <map> ใช้เพื่อดึง allocator object ของ container ที่เกี่ยวข้อง Allocator คือออบเจ็กต์ที่รับผิดชอบการจัดสรรหน่วยความจำแบบไดนามิก (dynamic memory allocation) ให้กับ container
รูปแบบไวยากรณ์ (Syntax)
multi_name.get_allocator();
พารามิเตอร์
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
ค่าที่ส่งคืน (Return Value)
คืนค่า allocator object ของ container ที่เกี่ยวข้อง (เป็นค่าคัดลอก copy)
ตัวอย่างการใช้งาน
ตัวอย่างที่ 1: การจัดสรรและคืนหน่วยความจำ
#include <iostream>
#include <map>
using namespace std;
int main() {
int arrsize;
multimap<char, int> mul;
pair<const char, int>* pr;
// จัดสรรหน่วยความจำสำหรับ 15 องค์ประกอบ
pr = mul.get_allocator().allocate(15);
// คำนวณขนาดของอาร์เรย์ที่จัดสรร
arrsize = sizeof(multimap<char, int>::value_type) * 10;
cout << "Size of the allocated array is: " << arrsize << " bytes.\n";
// คืนหน่วยความจำ 5 องค์ประกอบ
mul.get_allocator().deallocate(pr, 5);
return 0;
}
ผลลัพธ์
Size of the allocated array is: 80 bytes.
ตัวอย่างที่ 2: การจัดสรรขนาดต่างกัน
#include <iostream>
#include <map>
using namespace std;
int main() {
int arrsize;
multimap<char, int> mul;
pair<const char, int>* pr;
pr = mul.get_allocator().allocate(2);
arrsize = sizeof(multimap<char, int>::value_type) * 5;
cout << "Size of the allocated array is: " << arrsize << " bytes.\n";
mul.get_allocator().deallocate(pr, 5);
return 0;
}
ผลลัพธ์
Size of the allocated array is: 40 bytes.
สรุป
ฟังก์ชัน get_allocator() ใช้บ่อยในระดับ low-level memory management เช่นการ implement custom container หรือเมื่อต้องการควบคุมการจัดสรรหน่วยความจำโดยตรง ในการเขียนโปรแกรมทั่วไปมักไม่จำเป็นต้องใช้โดยตรง เพราะ container จัดการหน่วยความจำให้อัตโนมัติแล้ว