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

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

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 จัดการหน่วยความจำให้อัตโนมัติแล้ว