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

ฟังก์ชัน multimap::swap() ใน C++ STL (เวอร์ชัน 2)

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

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

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

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

เมื่อเรียกใช้ ฟังก์ชันจะรับ multimap อีกตัวหนึ่งเป็นพารามิเตอร์ และสลับเนื้อหากับ 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, char> mul_1;
    multimap<int, char> mul_2;
    multimap<int, char>::iterator i;
    
    // แทรกข้อมูลเข้า multimap1
    mul_1.insert(make_pair(0, 'a'));
    mul_1.insert(make_pair(1, 'b'));
    mul_1.insert(make_pair(2, 'c'));
    mul_1.insert(make_pair(3, 'd'));
    
    // แทรกข้อมูลเข้า multimap2
    mul_2.insert(make_pair(4, 'e'));
    mul_2.insert(make_pair(5, 'f'));
    mul_2.insert(make_pair(6, 'g'));
    
    // เรียก 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:
4 e
5 f
6 g

Elements in multimap2 are:
0 a
1 b
2 c
3 d

swap() member function vs std::swap()

// Member function (แนะนำ)
mul_1.swap(mul_2);

// Non-member function (generic)
std::swap(mul_1, mul_2);

ทั้งสองให้ผลลัพธ์เหมือนกัน แต่วิธี member function อาจมีประสิทธิภาพดีกว่าเล็กน้อยและเป็น idiomatic C++ มากกว่า

คุณสมบัติสำคัญ (ซ้ำเพื่อความชัดเจน)

  • O(1) time complexity - เพียงสลับ internal pointers
  • No element copying/moving - ไม่มี overhead การคัดลอกข้อมูล
  • Iterator validity preserved - Iterator ยัง valid แต่ชี้ container ตรงข้าม
  • noexcept - ไม่โยน exception

สรุป

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