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

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

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

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

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

ฟังก์ชัน multimap::swap() ประกาศอยู่ใน header <map> ใช้สลับเนื้อหาของ multimap 2 ตัวระหว่างกัน ฟังก์ชันนี้จะสลับค่าทั้งหมดโดยไม่คำนึงถึงขนาดของทั้งสอง container

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

multimap_name.swap(multimap& multimap_name2);

พารามิเตอร์

  • map_name2 - multimap container อีกตัวหนึ่งที่ต้องการสลับข้อมูล

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

ฟังก์ชันนี้ไม่ส่งค่าอะไรกลับ (void)

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

#include <iostream>
#include <map>
using namespace std;

int main() {
    multimap<int, int> mul_1;
    multimap<int, int> mul_2;
    multimap<int, int>::iterator i;
    
    // แทรกข้อมูลเข้า multimap1
    mul_1.insert({1, 10});
    mul_1.insert({2, 20});
    mul_1.insert({3, 30});
    mul_1.insert({4, 40});
    mul_1.insert({5, 50});
    
    // แทรกข้อมูลเข้า multimap2
    mul_2.insert({6, 60});
    mul_2.insert({7, 70});
    mul_2.insert({8, 80});
    mul_2.insert({9, 90});
    
    // เรียก swap เพื่อสลับข้อมูล
    mul_1.swap(mul_2);
    
    // แสดงข้อมูล multimap1 หลัง swap
    cout << "Elements in multimap1 are: " << "\n";
    for (i = mul_1.begin(); i != mul_1.end(); i++) {
        cout << (*i).first << " " << (*i).second << "\n";
    }
    
    // แสดงข้อมูล multimap2 หลัง swap
    cout << "\nElements in multimap2 are: ";
    for (i = mul_2.begin(); i != mul_2.end(); i++) {
        cout << (*i).first << " " << (*i).second << "\n";
    }
    
    return 0;
}

ผลลัพธ์

Elements in multimap1 are:
6 60
7 70
8 80
9 90

Elements in multimap2 are:
1 10
2 20
3 30
4 40
5 50

คุณสมบัติสำคัญ

  • Time complexity: O(1) - การสลับเกิดขึ้นในเวลาคงที่ เนื่องจากเพียงสลับ pointer ภายใน container เท่านั้น
  • No element copying - ไม่มีการคัดลอกหรือย้ายองค์ประกอบแต่ละตัว
  • Iterator validity - Iterator, pointer และ reference ยังคง valid แต่ชี้ไปยัง container อีกตัวแทน
  • Exception safety - ไม่มีการโยน exception (noexcept)

สรุป

swap() เป็นวิธีที่มีประสิทธิภาพสูงสุดสำหรับการแลกเปลี่ยนข้อมูลระหว่าง multimap 2 ตัว เหมาะสำหรับการ implement move semantics หรือเมื่อต้องการย้ายข้อมูลขนาดใหญ่โดยไม่มี overhead การคัดลอก