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

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

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

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

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

ฟังก์ชัน multimap::insert() ประกาศอยู่ใน header <map> ใช้แทรกค่าใหม่เข้าไปใน multimap container และเพิ่มขนาดของ container ตามจำนวนองค์ประกอบที่แทรก

แตกต่างจาก map ธรรมดาที่จะไม่แทรกหากคีย์ซ้ำ multimap จะอนุญาตให้แทรกคีย์ซ้ำได้หลายครั้ง ข้อมูลใหม่จะวางในตำแหน่งที่เหมาะสมตามลำดับคีย์

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

มี 4 รูปแบบการเรียกใช้:

// 1. แทรกคีย์-ค่าเดี่ยว
multiMap_name.insert({key& k, value_type& val});

// 2. แทรกพร้อม position hint
multiMap_name.insert(iterator& it, {key& k, value_type& val});

// 3. แทรกช่วงข้อมูล (range)
multiMap_name.insert(iterator& position1, iterator& position2);

// 4. แทรกจาก initializer list
multimap_name.insert(initializer_list<value_type> il);

พารามิเตอร์

  • k - คีย์ที่ผูกกับองค์ประกอบ
  • val - ค่าที่ต้องการแทรก
  • it - iterator ให้ position hint
  • position1, position2 - ช่วงเริ่มต้นและสิ้นสุดของข้อมูลที่ต้องการแทรก
  • il - initializer list ของข้อมูลที่ต้องการแทรก

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

คืนค่า iterator ชี้ไปยังองค์ประกอบที่แทรกใหม่ (สำหรับรูปแบบที่ 1 และ 2) หรือ void (สำหรับรูปแบบที่ 3 และ 4)

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

ตัวอย่างที่ 1: แทรกที่ตำแหน่งตามคีย์

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

int main() {
    multimap<int, int> mul;
    
    mul.insert({1, 10});
    mul.insert({2, 20});
    mul.insert({3, 30});
    mul.insert({4, 40});
    mul.insert({5, 50});
    
    cout << "Elements in multimap is: \n";
    cout << "KEY\tELEMENT\n";
    for (auto it = mul.begin(); it != mul.end(); ++it) {
        cout << it->first << '\t' << it->second << '\n';
    }
    return 0;
}

ผลลัพธ์

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

ตัวอย่างที่ 2: แทรกหลังคีย์ที่กำหนด (position hint)

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

int main() {
    multimap<int, int> mul;
    mul.insert({1, 10});
    mul.insert({2, 20});
    mul.insert({3, 30});
    mul.insert({5, 40});
    mul.insert({6, 50});
    
    // หาตำแหน่งคีย์ 3 แล้วแทรก 4, 90 หลังจากนั้น
    auto i = mul.find(3);
    mul.insert(i, {4, 90});
    
    cout << "KEY\tELEMENT\n";
    for (auto itr = mul.begin(); itr != mul.end(); ++itr) {
        cout << itr->first << '\t' << itr->second << '\n';
    }
    return 0;
}

ผลลัพธ์

KEY	ELEMENT
1	10
2	20
3	30
4	90
5	40
6	50

สรุป

insert() เป็นฟังก์ชันพื้นฐานสำหรับเพิ่มข้อมูลใน multimap มี overload หลายรูปแบบรองรับการใช้งานต่างๆ เช่น แทรกเดี่ยว แทรกพร้อม hint แทรกช่วงข้อมูล และแทรกจาก initializer list เหมาะสำหรับกรณีทั่วไปที่ไม่ต้องการ optimization ระดับสูงของ emplace()