ในบทความนี้ เราจะอธิบายการทำงาน ไวยากรณ์ และตัวอย่างของฟังก์ชัน map::emplace() ใน C++ STL
Map ใน C++ STL คืออะไร?
Map เป็น Associative Container ที่เก็บข้อมูลเป็นคู่ Key-Value จัดเรียงตาม Key อัตโนมัติ Key ต้องไม่ซ้ำกัน
map::emplace() คืออะไร?
map::emplace() สร้างและแทรก Element ลง Map โดยตรง (In-place Construction) ไม่ต้องสร้าง Object แยกแล้ว Copy/Move เข้ามา ใช้ได้ตั้งแต่ C++11
แทรกได้ก็ต่อเมื่อ Key ยังไม่มีใน Map (เหมือน insert())
Syntax
map_name.emplace(Args&&... args);
Parameters
args − Arguments สำหรับสร้าง Element (Key, Value)
Return Value
Pair: iterator ชี้ Element + bool (true = แทรกสำเร็จ, false = Key ซ้ำ)
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
TP_Map.emplace(4, 50);
TP_Map.emplace(2, 30);
TP_Map.emplace(1, 10);
TP_Map.emplace(1, 20); // Key 1 ซ้ำ - จะไม่แทรก
TP_Map.emplace(1, 30); // Key 1 ซ้ำ - จะไม่แทรก
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() vs insert()
| คุณสมบัติ | insert() | emplace() |
|---|---|---|
| การสร้าง Object | สร้างนอกเสีย แล้ว Copy/Move เข้า | สร้าง In-place ใน Map โดยตรง |
| ประสิทธิภาพ | อาจมี Overhead จาก Copy/Move | หลีกเลี่ยง Copy/Move ได้ |
| Syntax | insert({key, val}) | emplace(key, val) |
สรุป
ควรใช้ emplace() แทน insert() เมื่อเป็นไปได้ เพื่อประสิทธิภาพที่ดีกว่า