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

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

Multimap ใน C++ STL คืออะไร?

Multimap เป็น associative container ที่คล้ายกับ map แต่อนุญาตให้มีหลายค่าผูกกับคีย์เดียวกันได้ ข้อมูลจัดเรียงอัตโนมัติตามคีย์

ฟังก์ชัน multimap::emplace() คืออะไร?

ฟังก์ชัน multimap::emplace() ประกาศอยู่ใน header <map> ใช้สร้างและแทรกองค์ประกอบใหม่เข้าไปใน multimap โดยตรง (in-place construction) ฟังก์ชันนี้เพิ่มขนาดของ container ขึ้น 1

แตกต่างจาก insert() ที่ต้องสร้างออบเจ็กต์ก่อนแล้วค่อยคัดลอก/ย้ายเข้าไป emplace() สร้างออบเจ็กต์โดยตรงในหน่วยความจำของ container ลด overhead การคัดลอกหรือย้าย (copy/move)

รูปแบบไวยากรณ์ (Syntax)

multimap_name.emplace(Args& val);

พารามิเตอร์

  • val - อาร์กิวเมนต์สำหรับสร้างองค์ประกอบใหม่ (ส่งต่อไปยัง constructor ของ value_type)

ค่าที่ส่งคืน (Return Value)

คืนค่า iterator ชี้ไปยังตำแหน่งที่แทรกองค์ประกอบใหม่

ตัวอย่างการใช้งาน

#include <bits/stdc++.h>
using namespace std;

int main() {
    // สร้าง container
    multimap<int, int> mul;
    
    // แทรกข้อมูลด้วย emplace
    mul.emplace(1, 10);
    mul.emplace(4, 20);
    mul.emplace(5, 30);
    mul.emplace(2, 40);
    mul.emplace(3, 50);
    mul.emplace(4, 60);
    
    cout << "\nElements in multimap is: \n";
    cout << "KEY\tELEMENT\n";
    for (auto i = mul.begin(); i != mul.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    
    return 0;
}

ผลลัพธ์

Elements in multimap is:
KEY	ELEMENT
1	10
2	40
3	50
4	20
4	60
5	30

emplace() vs insert()

ด้านเปรียบเทียบemplace()insert()
การสร้างออบเจ็กต์In-place (ใน container โดยตรง)สร้างนอก container แล้ว copy/move เข้าไป
พารามิเตอร์Constructor argumentsvalue_type object หรือ pair
ประสิทธิภาพดีกว่า (หลีกเลี่ยง copy/move)อาจมี overhead
ความสะดวกสะดวกกว่าสำหรับ complex objectsต้องสร้าง pair ก่อน

สรุป

emplace() เป็นวิธีที่แนะนำสำหรับการแทรกข้อมูลใน multimap (และ associative containers อื่นๆ) ใน C++11 ขึ้นไป เนื่องจากมีประสิทธิภาพดีกว่าและโค้ดอ่านง่ายกว่า โดยเฉพาะเมื่อ value_type มี constructor ที่ซับซ้อน