Multimap ใน C++ STL คืออะไร?
Multimap เป็น associative container ที่คล้ายกับ map แต่อนุญาตให้มีหลายค่าผูกกับคีย์เดียวกันได้ ข้อมูลจัดเรียงอัตโนมัติตามคีย์
ฟังก์ชัน multimap::max_size() คืออะไร?
ฟังก์ชัน multimap::max_size() ประกาศอยู่ใน header <map> คืนค่าขนาดสูงสุดทฤษฎี (maximum theoretical size) ของ multimap container นั่นคือจำนวนองค์ประกอบสูงสุดที่ container สามารถจัดเก็บได้ภายใต้ข้อจำกัดของระบบและ library implementation
ค่านี้เป็น potential capacity ไม่ใช่การรับประกันว่าจะจัดเก็บได้จริง เพราะขึ้นอยู่กับหน่วยความจำที่มีอยู่ (available memory) และ fragmentation
รูปแบบไวยากรณ์ (Syntax)
multiMap_name.max_size();
พารามิเตอร์
ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ
ค่าที่ส่งคืน (Return Value)
คืนค่าจำนวนองค์ประกอบสูงสุดที่ container สามารถจัดเก็บได้ (size_type)
ตัวอย่างการใช้งาน
#include <bits/stdc++.h>
using namespace std;
int main() {
// สร้าง multimap ประเภทต่างๆ
multimap<int, int> mul;
multimap<char, char> char_mul;
multimap<float, float> float_mul;
cout << "Max size of multimap is " << mul.max_size();
cout << "\nMax size of multimap is " << char_mul.max_size();
cout << "\nMax size of multimap is " << float_mul.max_size();
return 0;
}
ผลลัพธ์ (ตัวอย่างบนระบบ 64-bit)
Max size of multimapis 461168601842738790 Max size of multimap is 461168601842738790 Max size of multimap is 461168601842738790
ข้อสังเกตสำคัญ
- ค่า max_size() มักจะเท่ากันสำหรับทุกประเภทข้อมูลบน architecture เดียวกัน (ขึ้นอยู่กับ pointer size)
- บนระบบ 64-bit ค่ามักใกล้เคียง 262 - 1 (ประมาณ 4.6 × 1018)
- ค่านี้คำนวณจาก
std::numeric_limits<size_type>::max() / sizeof(node)ประมาณ - ในทางปฏิบัติ จะไม่สามารถจัดเก็บข้อมูลถึงค่านี้ได้ เพราะหน่วยความจำไม่พอ
สรุป
max_size() ใช้สำหรับตรวจสอบขีดจำกัดทฤษฎีของ container ไม่ใช่สำหรับเช็คพื้นที่ว่างจริง หากต้องการรู้ว่าสามารถแทรกข้อมูลเพิ่มได้อีกเท่าไร ควรใช้การจัดการหน่วยความจำระดับระบบบแทน