ในบทความนี้ เราจะอธิบายการทำงาน ไวยากรณ์ และตัวอย่างของฟังก์ชัน map::emplace_hint() ใน C++ STL
Map ใน C++ STL คืออะไร?
Map เป็น Associative Container ที่เก็บข้อมูลเป็นคู่ Key-Value จัดเรียงตาม Key อัตโนมัติ Key ต้องไม่ซ้ำกัน
map::emplace_hint() คืออะไร?
map::emplace_hint() คล้าย emplace() แต่รับ Hint Iterator เพิ่มเติม บอกตำแหน่งประมาณที่ควรแทรก ช่วยให้เร็วขึ้นถ้า Hint ใกล้ตำแหน่งจริง
Syntax
map_name.emplace_hint(iterator it, Args&&... args);
Parameters
- it − Hint Iterator (ตำแหน่งประมาณที่จะแทรก)
- args − Arguments สำหรับสร้าง Element
Return Value
Iterator ชี้ Element ที่แทรก (หรือ Element เดิมถ้า Key ซ้ำ)
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
// ใช้ begin() เป็น Hint (แทรกที่หน้า)
TP_Map.emplace_hint(TP_Map.begin(), 4, 50);
TP_Map.emplace_hint(TP_Map.begin(), 2, 30);
TP_Map.emplace_hint(TP_Map.begin(), 1, 10);
cout << "TP Map is : \nMAP_KEY\tMAP_ELEMENT\n";
for (auto i = TP_Map.begin(); i != TP_Map.end(); i++)
cout << i->first << "\t" << i->second << endl;
return 0;
}
ผลลัพธ์
TP Map is: MAP_KEY MAP_ELEMENT 1 10 2 30 4 50
เมื่อไหร่ควรใช้ emplace_hint()?
- เมื่อรู้ตำแหน่งประมาณที่จะแทรก (เช่น แทรก Key เรียงลำดับ)
- Hint ถูกต้อง → O(1) Amortized
- Hint ผิด → ยังคง O(log n) เหมือน emplace() ปกติ
สรุป
emplace_hint() = emplace() + Hint Iterator สำหรับเพิ่มประสิทธิภาพการแทรกข้อมูลจำนวนมากที่เรียงลำดับแล้ว