map และ unordered_map เป็น associative containers ใน C++ STL ที่เก็บข้อมูลเป็น key-value pairs โดย key ต้องไม่ซ้ำกัน
เมธอดพื้นฐานของ map
begin()– iterator ชี้ไปที่ element แรกend()– iterator ชี้ไปหลัง element สุดท้ายsize()– จำนวน elementsmax_size()– จำนวนสูงสุดที่เก็บได้empty()– เช็คว่าว่างหรือไม่
ตัวอย่าง map (เรียงลำดับ key อัตโนมัติ)
#include <bits/stdc++.h>
using namespace std;
int main() {
int A[] = { 2, 2, 3, 2, 2, 4, 5, 4 };
int num = sizeof(A) / sizeof(A[0]);
map<int, int> my_map;
for (int p = 0; p < num; p++)
my_map[A[p]]++;
cout << "Item Frequency" << endl;
for (auto p : my_map)
cout << p.first << " : " << p.second << endl;
}
เอาต์พุท (เรียงตาม key)
Item Frequency 2 : 4 3 : 1 4 : 2 5 : 1
ตัวอย่าง unordered_map (ไม่เรียงลำดับ เร็วกว่าเฉลี่ย O(1))
#include <bits/stdc++.h>
using namespace std;
int main() {
int A[] = { 2, 2, 3, 2, 2, 4, 5, 4 };
int num = sizeof(A) / sizeof(A[0]);
unordered_map<int, int> my_map;
for (int p = 0; p < num; p++)
my_map[A[p]]++;
cout << "Item Frequency" << endl;
for (auto p : my_map)
cout << p.first << " : " << p.second << endl;
}
เอาต์พุท (ลำดับไม่คงที่)
Item Frequency 5 : 1 4 : 2 2 : 4 3 : 1
การเลือกใช้
| คุณสมบัติ | map | unordered_map |
|---|---|---|
| ลำดับ | เรียงตาม key (RB-tree) | ไม่เรียง (hash table) |
| เวลา search/insert/delete | O(log n) | เฉลี่ย O(1) |
| ใช้เมื่อ | ต้องการ ordered iteration | ต้องการความเร็วสูงสุด ไม่สนลำดับ |