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 การคัดลอก