C++:
การใช้แอเรย์สมาชิก
วิธีการ:
ในภาษา C++ แอสโซซิเอทีฟอาร์เรย์สามารถใช้งานได้ด้วยการรวมเข้ากับ header <map>
และ <unordered_map>
ลองมาดูตัวอย่างการใช้งานทั้งสองอย่างนี้กัน
การใช้ std::map
std::map
จะเก็บองค์ประกอบโดยจัดเรียงตามคีย์ นี่คือวิธีเริ่มต้นใช้งาน:
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, int> ageMap;
// การแทรกค่า
ageMap["Alice"] = 30;
ageMap["Bob"] = 25;
// การเข้าถึงค่า
std::cout << "อายุของ Bob: " << ageMap["Bob"] << std::endl;
// การวนซ้ำผ่าน map
for(const auto &pair : ageMap) {
std::cout << pair.first << " อายุ " << pair.second << " ปี" << std::endl;
}
return 0;
}
การใช้ std::unordered_map
เมื่อลำดับไม่สำคัญแต่ประสิทธิภาพการทำงานคือสิ่งที่คุณต้องการ std::unordered_map
เป็นตัวเลือกที่เหมาะสม โดยมีความซับซ้อนเฉลี่ยของการทำงานที่เร็วกว่าสำหรับการแทรก การค้นหา และลบ
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::unordered_map<std::string, double> productPrice;
// การแทรกค่า
productPrice["milk"] = 2.99;
productPrice["bread"] = 1.99;
// การเข้าถึงค่า
std::cout << "ราคานม: $" << productPrice["milk"] << std::endl;
// การวนซ้ำผ่าน unordered_map
for(const auto &pair : productPrice) {
std::cout << pair.first << " ราคา $" << pair.second << std::endl;
}
return 0;
}
ลงลึก
แอสโซซิเอทีฟอาร์เรย์ในภาษา C++ โดยเฉพาะ std::map
และ std::unordered_map
ไม่ใช่เพียงแค่เกี่ยวกับการเก็บองค์ประกอบ แต่ยังให้ฐานสำหรับการจัดการข้อมูลที่ซับซ้อนยิ่งขึ้นโดยอนุญาตให้ดำเนินการเช่นการค้นหา การแทรก และการลบด้วยเวลาที่มีประสิทธิภาพ (เวลาโลการิธึมสำหรับ std::map
และเวลาคงที่เฉลี่ยสำหรับ std::unordered_map
) ประสิทธิภาพนี้มาจากโครงสร้างข้อมูลพื้นฐาน: ต้นไม้ที่สมดุลสำหรับ std::map
และตารางแฮชสำหรับ std::unordered_map
ในอดีต ก่อนที่จะมีส่วนหนึ่งของไลบรารี่มาตรฐาน นักโปรแกรมเมอร์จะต้องทำการเขียนเวอร์ชันของตัวเองหรือใช้ไลบรารี่ของบุคคลที่สาม นำไปสู่ความไม่สม่ำเสมอและศักยภาพในการทำงานที่ไม่มีประสิทธิภาพ การรวม map ไว้ในไลบรารี่มาตรฐานของภาษา C++ ไม่เพียงแต่มาตรฐานการใช้งานเท่านั้น แต่ยังเพิ่มประสิทธิภาพให้กับมันในแพลตฟอร์มและคอมไพเลอร์ที่แตกต่างกัน
แม้ว่าทั้งสองจะมีประสิทธิภาพเยี่ยม แต่การเลือกระหว่าง std::map
และ std::unordered_map
ขึ้นอยู่กับรายละเอียดของกรณีการใช้งานของคุณ ต้องการข้อมูลที่มีการเรียงลำดับและไม่คิดเห็นปัญหาเรื่องประสิทธิภาพเล็กน้อย? ใช้ std::map
หากคุณต้องการความเร็วและไม่สนใจเรื่องการเรียงลำดับ std::unordered_map
อาจเหมาะสมกับคุณมากกว่า
อย่างไรก็ตาม สำคัญที่จะต้องทราบว่าเมื่อทำงานกับโครงสร้างข้อมูลที่ซับซ้อน จะมีการแลกเปลี่ยนเสมอ ในบางกรณีพิเศษ โครงสร้างข้อมูลอื่น ๆ หรือแม้แต่ไลบรารี่ของบุคคลที่สามอาจมีประสิทธิภาพหรือฟังก์ชั่นการใช้งานที่เหมาะสมกับความต้องการเฉพาะของคุณมากกว่า ควรพิจารณาตัวเลือกของคุณตามความต้องการของโปรเจกต์ที่คุณทำ