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

ฟังก์ชัน map::emplace() ใน C++ STL


ในบทความนี้ เราจะอธิบายการทำงาน ไวยากรณ์ และตัวอย่างของฟังก์ชัน 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 ได้
Syntaxinsert({key, val})emplace(key, val)

สรุป

ควรใช้ emplace() แทน insert() เมื่อเป็นไปได้ เพื่อประสิทธิภาพที่ดีกว่า