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

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


ในบทความนี้ เราจะอธิบายการทำงาน ไวยากรณ์ และตัวอย่างของฟังก์ชัน 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 สำหรับเพิ่มประสิทธิภาพการแทรกข้อมูลจำนวนมากที่เรียงลำดับแล้ว