การตอบคำถามนี้มีความซับซ้อนโดยโปรแกรมเมอร์ที่ได้เห็นแง่ที่ให้ความหมายที่เฉพาะเจาะจงมากขึ้นโดยเฉพาะอย่างยิ่งในภาษาหรือระบบที่พวกเขาเคยใช้ แต่คำถามจะถามสำหรับภาษาเปรียบเทียบไม่เชื่อเรื่องพระเจ้า "ในทางทฤษฎี" ซึ่งฉันสละหมายถึงในแง่วิทยาศาสตร์คอมพิวเตอร์ .
คำศัพท์อธิบาย
พจนานุกรมวิทยาศาสตร์คอมพิวเตอร์ของมหาวิทยาลัยออกฟอร์ดแสดงรายการ:
พจนานุกรมโครงสร้างข้อมูลใด ๆ ที่แสดงถึงชุดขององค์ประกอบที่สามารถรองรับการแทรกและการลบองค์ประกอบรวมถึงการทดสอบการเป็นสมาชิก
- ตัวอย่างเช่นเรามีชุดขององค์ประกอบ {A, B, C, D ... } ที่เราสามารถแทรกและสามารถเริ่มลบและเราสามารถค้นหา"เป็น C อยู่หรือไม่" .
แนวคิดทางวิทยาศาสตร์คอมพิวเตอร์ของแผนที่นั้นขึ้นอยู่กับการทำแผนที่ศัพท์คณิตศาสตร์ซึ่ง Oxford Dictionary กำหนดเป็น:
การแมปการดำเนินการที่เชื่อมโยงแต่ละองค์ประกอบของชุดที่กำหนด (โดเมน) กับองค์ประกอบหนึ่งรายการหรือมากกว่าของชุดที่สอง (ช่วง)
- ในฐานะที่เป็นเช่นนี้แผนที่โครงสร้างข้อมูลมีวิธีที่จะไปจากองค์ประกอบของชุดที่กำหนด - ที่รู้จักกันคือ " กุญแจ " ในแผนที่หนึ่งหรือมากกว่าหนึ่งองค์ประกอบในชุดที่สอง - ที่รู้จักในฐานะที่เกี่ยวข้อง " ค่า (s) "
- องค์ประกอบ"... หรือมากกว่าในชุดที่สอง"สามารถรองรับได้โดยการนำไปปฏิบัติมีสองวิธีที่แตกต่างกัน:
- การปรับใช้แผนที่จำนวนมากบังคับใช้คีย์เฉพาะและอนุญาตให้แต่ละคีย์เชื่อมโยงกับค่าเดียวเท่านั้น แต่ค่านั้นอาจเป็นโครงสร้างข้อมูลที่มีค่าชนิดข้อมูลที่ง่ายกว่าเช่น {{1, {"one" , "ichi"}, {2, {"two", "ni"}}} แสดงค่าที่ประกอบด้วยคู่ของสตริง
- การใช้งานแผนที่อื่น ๆ อนุญาตให้คีย์ที่ซ้ำกันแต่ละการแมปไปเป็นค่าเดียวกันหรือต่างกัน - ซึ่งเป็นไปตามหน้าที่ "เชื่อมโยง ... องค์ประกอบ [คีย์] ... กับ ... มากกว่า [มากกว่าหนึ่ง] [ค่า] องค์ประกอบ" ตัวอย่างเช่น {{1, "one"}, {1, "ichi"}, {2, "two"}, {2, "ni"}}
ตรงกันข้ามกับพจนานุกรมและแผนที่
ดังนั้นการใช้คำศัพท์ Comp Sci ที่เข้มงวดด้านบนพจนานุกรมจะเป็นเพียงแผนที่เท่านั้นหากอินเทอร์เฟซเกิดขึ้นเพื่อรองรับการดำเนินการเพิ่มเติมที่ไม่จำเป็นสำหรับทุกพจนานุกรม
บิดเล็กน้อย:
- ส่วนต่อประสานแผนที่อาจไม่สนับสนุนการทดสอบโดยตรงว่าคู่ {key, value} อยู่ในคอนเทนเนอร์หรือไม่ซึ่งเป็นข้อกำหนดของพจนานุกรมที่มีองค์ประกอบเป็นคู่ {key, value} แผนที่อาจไม่มีฟังก์ชั่นสำหรับทดสอบคีย์ แต่ที่แย่ที่สุดคุณสามารถดูได้ว่าการเรียกใช้การเรียกคืนค่าโดยใช้คีย์สำเร็จหรือล้มเหลวจากนั้นถ้าคุณสนใจคุณสามารถตรวจสอบว่าคีย์เรียกค่าที่คาดไว้ได้หรือไม่
สื่อสารกับผู้ชมของคุณอย่างไม่น่าสงสัย
⚠แม้จะมีทั้งหมดข้างต้นหากคุณใช้พจนานุกรมในความหมายของวิทยาศาสตร์คอมพิวเตอร์ที่เข้มงวดอธิบายไว้ข้างต้นอย่าคาดหวังว่าผู้ชมของคุณจะติดตามคุณในตอนแรกหรือจะประทับใจเมื่อคุณแบ่งปันและปกป้องคำศัพท์ คำตอบอื่น ๆ สำหรับคำถามนี้ (และ upvotes) แสดงให้เห็นว่ามีแนวโน้มว่า"พจนานุกรม" จะตรงกันกับ "แผนที่"ในประสบการณ์ของโปรแกรมเมอร์ส่วนใหญ่ พยายามเลือกคำศัพท์ที่จะเข้าใจอย่างกว้างขวางและชัดเจนยิ่งขึ้น: เช่น
- คอนเทนเนอร์ที่เชื่อมโยง : คอนเทนเนอร์ใด ๆ ที่เก็บคู่คีย์ / ค่าที่มีการดึงค่าและการลบตามคีย์
- แผนที่แฮช : การใช้ตารางแฮชของคอนเทนเนอร์ที่เกี่ยวข้อง
- ชุดแฮชบังคับใช้คีย์ที่ไม่ซ้ำกัน : การใช้งานตารางแฮชของพจนานุกรมการจัดเก็บองค์ประกอบ / ค่าโดยไม่ต้องปฏิบัติต่อพวกเขาเช่นเดียวกับที่มีส่วนประกอบของคีย์ / ค่าที่แตกต่างกันซึ่งขัดแย้งกันขององค์ประกอบที่ไม่สามารถแทรก
- แผนที่ต้นไม้ไบนารีสมดุลสนับสนุนคีย์ที่ซ้ำกัน : ...
คำศัพท์ Crossreferencing Comp Sci พร้อมการใช้งานเฉพาะ
C ++ ไลบรารีมาตรฐาน
- แผนที่:
map
, multimap
, unordered_map
,unordered_multimap
- พจนานุกรมอื่น ๆ :
set
, multiset
, unordered_set
,unordered_multiset
- หมายเหตุ: มี iterators หรือ
std::find
คุณสามารถลบองค์ประกอบและการทดสอบการเป็นสมาชิกในarray
, vector
, list
, deque
ฯลฯ แต่อินเตอร์เฟซภาชนะที่ไม่สนับสนุนโดยตรงว่าเป็นเพราะการหาองค์ประกอบคือยี่หระไม่มีประสิทธิภาพที่ O (N) ในบางกรณีแทรก / ลบคือ ไม่มีประสิทธิภาพและสนับสนุนการดำเนินการเหล่านั้นทำลาย API ที่ จำกัด โดยเจตนาภาชนะหมายถึง - เช่นdeque
ควรสนับสนุนการลบ / ป๊อปอัพที่ด้านหน้าและด้านหลังและไม่ได้อยู่ในแง่ของคีย์บางอย่าง ต้องทำงานเพิ่มเติมในรหัสเพื่อเตรียมการค้นหาอย่างนุ่มนวลกระตุ้นให้โปรแกรมเมอร์เปลี่ยนเป็นโครงสร้างข้อมูลคอนเทนเนอร์ด้วยการค้นหาที่มีประสิทธิภาพมากขึ้น
... อาจเพิ่มภาษาอื่นในภายหลัง / อย่าลังเลที่จะแก้ไขใน ...