A ใน Python ไป หรือ ใน JavaScript พารามิเตอร์พันธมิตรใน PHP, ใน C++ แผนที่แฮชจะถูกนําไปใช้ในเกือบทุกภาษาการเขียนโปรแกรมระดับสูง และพวกเขามีความประหลาดใจ! ใครไม่ต้องการเก็บและเข้าถึงข้อมูลในเวลาที่ต่อเนื่องหรือไม่? ไม่ว่าคุณจะทํางานกับชุดข้อมูลขนาดใหญ่หรือขัดปัญหา Leetcode บ่อยครั้งที่โครงสร้างข้อมูลนี้มาเพื่อความช่วยเหลือ แต่พวกเขาเป็นสิ่งที่แน่นอนและวิธีที่พวกเขาทํางานภายใต้หมวก? ในบทความนี้เราจะพยายามและตอบคําถามเหล่านี้ dict map Object Map Dictionary<TKey, TValue> แผนที่ Hash คืออะไร ในระดับสูงแผนที่แฮชหรือตารางแฮชเป็นโครงสร้างข้อมูลที่นําไปใช้ประเภทข้อมูลการอ้างอิงของกลุ่มการเชื่อมโยงซึ่งเป็นโครงสร้างที่สามารถทําแผนที่คีย์ไปยังค่า คีย์ถูกใช้เพื่อระบุค่าในแผนที่และค่าคือข้อมูลที่ถูกเก็บไว้ แผนที่แฮชถูกออกแบบมาเพื่อให้สามารถแทรกการลบและการค้นหาคู่ค่าคีย์ได้อย่างรวดเร็ว ในความเป็นจริงความซับซ้อนเวลาเฉลี่ยสําหรับกระบวนการเหล่านี้คือ O(1), ซึ่งหมายความว่าพวกเขาสามารถดําเนินการในเวลาที่คงที่! คุณลักษณะนี้ทําให้แผนที่แฮชอาจเป็นโครงสร้างข้อมูลที่ใช้มากที่สุดในการเขียนโปรแกรม อย่างไรก็ตามมีคําเตือนบางอย่างเกี่ยวกับเรื่องนี้เช่นที่เราจะเห็นในภายหลัง ความซับซ้อนเวลาในกรณีที่เลวร้ายที่สุดสําหรับการดําเนินงานเหล่านี้คือ O(n) ซึ่งอาจเกิดขึ้นในสถานการณ์บางอย่างและเรารู้เพิ่มเติมเกี่ยวกับสถานการณ์ภายในเท่าไหร่เราจะหลีกเลี่ยงสถานการณ์เหล่านี้ ตามที่ : Wikipedia บทความ ตารางแฮชเป็นโครงสร้างข้อมูลที่นําไปใช้กับอัตราการเชื่อมโยงที่เรียกว่าคําพูดหรือเพียงแค่แผนที่; ตารางการเชื่อมโยงเป็นประเภทข้อมูลที่แยกแยะที่แผนที่กุญแจไปยังค่า. ตารางแฮชใช้ฟังก์ชั่นแฮชเพื่อคํานวณดัชนีที่เรียกว่ารหัสแฮชไปยังอัตราการเชื่อมโยงของถังหรือช่องที่สามารถค้นหาค่าที่ต้องการได้ ตารางแฮชเป็นโครงสร้างข้อมูลที่นําไปใช้กับอัตราการเชื่อมโยงที่เรียกว่าคําพูดหรือเพียงแค่แผนที่; ตารางการเชื่อมโยงเป็นประเภทข้อมูลที่แยกแยะที่แผนที่กุญแจไปยังค่า. ตารางแฮชใช้ฟังก์ชั่นแฮชเพื่อคํานวณดัชนีที่เรียกว่ารหัสแฮชไปยังอัตราการเชื่อมโยงของถังหรือช่องที่สามารถค้นหาค่าที่ต้องการได้ ดังนั้นให้เราย้อนกลับและดูส่วนประกอบของแผนที่แฮช ฟังก์ชั่น Hash คืออะไร ฟังก์ชั่นแฮชเป็นฟังก์ชั่นที่ใช้การป้อนข้อมูล (หรือ "คีย์") และโดยทั่วไปจะกลับตัวเลขเต็มที่ที่ใช้ในการอเนกประสงค์ข้อมูลในแผนที่แฮช คีย์จะถูกแปลงเป็นตัวเลขเต็มซึ่งจะถูกใช้เพื่อกําหนดตัวอเนกประสงค์ในแถบพื้นฐานที่เก็บค่า ฟังก์ชั่น hash ที่ดีมีคุณสมบัติดังต่อไปนี้: Deterministic: อินพุตเดียวกันจะสร้างผลผลิตเดียวกันเสมอ การกระจายแบบสม่ําเสมอ: ฟังก์ชั่นแฮชควรกระจายคีย์อย่างสม่ําเสมอทั่วตารางแฮชเพื่อลดความขัดแย้ง การคํานวณอย่างรวดเร็ว: ฟังก์ชั่นแฮชควรจะรวดเร็วในการคํานวณแม้สําหรับอินพุตขนาดใหญ่ ปลดความขัดแย้ง: พื้นที่ของคีย์ที่เป็นไปได้มักจะใหญ่กว่า (มักจะไม่มีที่สิ้นสุด) พื้นที่ของรหัสแฮช นี่หมายความว่าคีย์ที่แตกต่างกันสามารถผลิตรหัสแฮชเดียวกัน ในขณะที่การขัดแย้งเหล่านี้เป็นสิ่งหลีกเลี่ยงไม่ได้ฟังก์ชั่นแฮชที่ดีช่วยลดโอกาสของคีย์ที่แตกต่างกันที่ผลิตรหัสแฮชเดียวกัน ตัวอย่างง่ายๆของฟังก์ชั่นแฮชคือการดําเนินการ modulo ซึ่งใช้คีย์และกลับส่วนที่เหลือเมื่อแบ่งด้วยขนาดของตารางแฮช ตัวอย่างเช่นถ้าเรามีตารางแฮชขนาด 10 และคีย์ 23 รหัสแฮชจะ , ซึ่งหมายความว่าค่าที่เชื่อมโยงกับคีย์ 23 จะถูกเก็บไว้ที่ดัชนี 3 ในแถบพื้นฐาน และถ้าคีย์คือ 33 รหัสแฮชจะ เช่นกันซึ่งหมายความว่าเรามีการขัดแย้ง ในกรณีนี้ทั้งสองคีย์จะทําแผนที่ไปยังตัวอักษรเดียวกันในแถบ 23 % 10 = 3 33 % 10 = 3 อะไรคือ Bucket ตะแกรงเป็นช่องว่างในตารางแฮชที่เก็บคู่ค่ากุญแจ ในกรณีที่เกิดการขัดขวางซึ่งสองคีย์ที่แตกต่างกันผลิตรหัสแฮชเดียวกัน ตะแกรงสามารถเก็บคู่ค่ากุญแจหลาย คู่ นี้มักจะทําโดยใช้รายการที่เชื่อมโยงหรือโครงสร้างข้อมูลอื่น ๆ เพื่อจัดการกับการขัดขวาง แผนภาพนี้แสดงให้เห็นถึงวิธีการทํางานทั้งหมดนี้: โซฟา ที่นี่เราสามารถดูว่าฟังก์ชั่นแฮชจะถ่ายทอดคีย์ไปยังดัชนีในแถบพื้นฐานได้อย่างไร คีย์ 23 และ 33 ทั้งสองผลิตรหัสแฮชเดียวกันของ 3 ซึ่งหมายความว่าพวกเขาจะถูกเก็บไว้ในถังเดียวกัน ถังสามารถเก็บคู่ค่าคีย์ทั้งสอง แต่เมื่อเราได้รับค่าเราต้องตรวจสอบคีย์ในถังเพื่อค้นหาที่ถูกต้อง นี่คือที่ความซับซ้อนของเวลาสามารถเพิ่มขึ้นเป็น O(n) ในกรณีที่เลวร้ายที่สุดหากคีย์หลาย (หรือแม้กระทั่งทั้งหมด) ตัดกันและเก็บไว้ในถังเดียวกัน ปัจจัยโหลด ปัจจัยโหลดคือการวัดความเต็มที่ของตารางแฮช มันถูกคํานวณเป็นจํานวนองค์ประกอบในตารางแฮชที่แบ่งออกด้วยจํานวนถัง (หรือช่อง) ในแถวพื้นฐาน ปัจจัยโหลดที่สูงขึ้นหมายความว่ามีองค์ประกอบมากขึ้นในตารางแฮชเมื่อเทียบกับจํานวนถังซึ่งสามารถนําไปสู่การขัดขวางมากขึ้นและประสิทธิภาพที่ช้าลง การแก้ปัญหาการขัดแย้ง เมื่อสองคีย์ผลิตรหัสแฮชเดียวกันเรามีการขัดแย้ง มีหลายกลยุทธ์ในการจัดการการขัดแย้งในแผนที่แฮช: : In this method, each bucket contains a linked list (or another data structure) of all key-value pairs that hash to the same index. When a collision occurs, the new key-value pair is simply added to the list in the appropriate bucket. This is the most common method for handling collisions. Chaining : Average O(1) for all operations, worst-case O(n) if all keys hash to the same bucket Complexity : Simple to implement, handles high load factors well, deletion is straightforward Pros : Extra memory overhead for pointers, poor cache performance due to scattered memory access Cons Open Addressing: ในวิธีการนี้เมื่อเกิดขึ้นการขัดแย้งตารางแฮชจะค้นหาสล็อตถัดไปที่มีอยู่ในช่วงเพื่อจัดเก็บคู่ค่าคีย์ใหม่ มีเทคนิคหลายประการสําหรับการค้นหาสล็อตถัดไปที่มีอยู่: : หากเกิดการขัดแย้งอัลกอริทึมจะตรวจสอบช่องว่างถัดไปในแถวจนกว่าจะพบช่องว่างว่างเปล่า Linear Probing ความซับซ้อน: อัตราเฉลี่ย O(1), O(n) ที่เลวร้ายที่สุดเนื่องจากกลุ่มหลัก ข้อดี: การประยุกต์ใช้ง่ายประสิทธิภาพแคชที่ดีสําหรับการเข้าถึงที่ใกล้เคียง ข้อเสีย: การรวมกลุ่มหลัก (สล็อตที่ครอบครองต่อเนื่อง) การลดประสิทธิภาพด้วยการรวมกลุ่ม : แทนที่จะตรวจสอบสล็อตถัดไปมันจะตรวจสอบสล็อตที่ระยะห่างเพิ่มขึ้น (1, 4, 9, ฯลฯ) จากดัชนีเดิม Quadratic Probing ความซับซ้อน: อัตราเฉลี่ย O(1), ดีกว่าการสํารวจเชิงเส้นเนื่องจากลดการสะสม ข้อดี: ลดการรวมกลุ่มหลักเมื่อเทียบกับการสํารวจเชิงเส้นยังคงเป็นมิตรกับแคช ข้อเสีย: Clustering ประการที่สอง (คีย์ที่มีแฮชเดียวกันตามลําดับ sonde เดียวกัน) อาจไม่เข้าชมสล็อตทั้งหมด : ใช้ฟังก์ชั่นแฮชครั้งที่สองเพื่อกําหนดขนาดขั้นตอนสําหรับการสํารวจ ไม่เหมือนการสํารวจเชิงเส้นซึ่งมักจะย้ายไปยังช่องถัดไปหรือการสํารวจสี่เหลี่ยมซึ่งใช้ลําดับคงที่การสํารวจคู่คํานวณขนาดขั้นตอนที่ไม่ซ้ํากันสําหรับแต่ละคีย์ สูตรทั่วไปคือ: ที่ หมายเลขการทดลองสอดแนม ฟังก์ชั่นแฮชที่สองต้องกลับค่าที่ค่อนข้างสําคัญกับขนาดตารางเพื่อให้แน่ใจว่าสล็อตทั้งหมดสามารถเข้าชมได้ ตัวอย่างเช่นถ้า และ จากนั้นเราจะสํารวจดัชนี 7, 10, 13, 16 ฯลฯ Double Hashing index = (hash1(key) + i * hash2(key)) % table_size i hash1(key) = 7 hash2(key) = 3 : Average O(1), best performance among open addressing methods Complexity : Minimizes clustering, uniform distribution of probe sequences, visits all slots when properly implemented Pros : More complex implementation, requires computing two hash functions, and slightly more overhead per operation Cons : If the load factor becomes too high, the hash table can be resized and all existing key-value pairs can be rehashed into the new table. This helps to maintain efficient performance as the number of elements grows. Rehashing : O(n) for the rehashing operation itself, but amortizes to O(1) per insertion over time Complexity : Maintains optimal performance by keeping the load factor low, prevents performance degradation Pros : Temporary performance spike during rehashing, requires additional memory during the resize operation Cons แต่ละวิธีการเหล่านี้มีข้อเสนอแนะของตัวเองในแง่ของความซับซ้อนประสิทธิภาพและการใช้หน่วยความจํา การเลือกกลยุทธ์การแก้ปัญหานี้สามารถส่งผลกระทบอย่างมีนัยสําคัญต่อประสิทธิภาพโดยรวมของแผนที่แฮช นี่คือการสรุปอย่างรวดเร็วของข้อดีและข้อเสียของแต่ละวิธีการแก้ปัญหาการขัดแย้ง: Feature Chaining Linear Probing Quadratic Probing Double Hashing Average Time Complexity O(1) O(1) O(1) O(1) Worst-case Time Complexity O(n) O(n) O(n) O(n) Memory Overhead High (pointers) Low Low Low Cache Performance Poor Good Good Moderate Implementation Complexity Simple Simple Moderate Complex Clustering Issues None Primary clustering Secondary clustering Minimal Load Factor Tolerance High (>1.0) Low (<0.7) Low-Medium (<0.7) Medium (<0.8) Deletion Complexity Simple Complex (tombstones) Complex (tombstones) Complex (tombstones) Space Efficiency Lower Higher Higher Higher Performance Degradation Gradual Rapid at high load Moderate at high load Slow at high load Hash Function Requirements One One One Two Best Use Cases Unknown load factors, frequent deletions Cache-friendly applications, low load Better than linear, moderate load High performance, predictable load Average Time Complexity มุมมอง (1) มุมมอง (1) มุมมอง (1) มุมมอง (1) Worst-case Time Complexity O(n) O(n) O(n) O(n) Memory Overhead สูง (pointers) ต่ํา ต่ํา ต่ํา Cache Performance โหดร้าย ดี ดี สะดวก Implementation Complexity ง่าย ง่าย สะดวก องค์ประกอบ Clustering Issues ไม่มี คลัสเตอร์หลัก คลัสเตอร์ที่สอง มินิ Load Factor Tolerance สูง (>1.0) ระดับต่ํา (<0.7) ระดับต่ํา (<0.7) Medium (<0.8) Deletion Complexity ง่าย คอมเพล็กซ์ (墓石) คอมเพล็กซ์ (墓石) คอมเพล็กซ์ (墓石) Space Efficiency น้อยลง สูง Higher สูง Performance Degradation ขั้นตอน ความเร็วในการโหลดสูง อุณหภูมิต่ําที่โหลดสูง ความช้าในโหลดสูง Hash Function Requirements หนึ่ง หนึ่ง หนึ่ง สองคน Best Use Cases ปัจจัยการโหลดที่ไม่รู้จักการลบบบ่อย แอปพลิเคชันที่เป็นมิตรกับแคชโหลดต่ํา ดีกว่าการโหลดเชิงเส้น moderate ประสิทธิภาพสูงโหลดที่คาดการณ์ได้ ตัวอย่างของโลกจริง การประยุกต์ใช้ภาษาโปรแกรม หลายภาษาโปรแกรมมีแผนที่แฮชในตัว การประยุกต์ใช้เหล่านี้มักใช้การรวมกันของเทคนิคที่อธิบายไว้ข้างต้นเพื่อให้การทํางานที่มีประสิทธิภาพและจัดการการขัดแย้งได้อย่างมีประสิทธิภาพ dict ของ Python ใช้ addressing เปิดด้วย sonding randomized, rehashing เมื่อปัจจัยโหลดเกินประมาณ 0.66 HashMap ของ Java ใช้การเชื่อมโยงกับรายชื่อที่เชื่อมโยง (แปลงเป็นต้นสมดุลสําหรับถังขนาดใหญ่ใน Java 8 +) การเร่งใหม่ที่ปัจจัยโหลด 0.75 C++ ของ unordered_map โดยปกติจะใช้การเชื่อมโยง แต่การใช้งานอาจแตกต่างกัน ระบบฐานข้อมูล แผนที่แฮชยังใช้กันอย่างแพร่หลายในการดัชนีฐานข้อมูล ระบบฐานข้อมูลจํานวนมากใช้ตัวบ่งชี้แฮชเพื่อเร่งการค้นหาข้อมูล ตัวบ่งชี้เหล่านี้ช่วยให้การค้นหาอย่างรวดเร็วโดยการแฮชคอลัมน์ที่ดัชนีและจัดเก็บคู่ค่าคีย์ที่เกิดขึ้นในตารางแฮช เมื่อคําถามถูกเรียกใช้ฐานข้อมูลสามารถค้นหาแถวที่เกี่ยวข้องได้อย่างรวดเร็วโดยการคํานวณแฮชของคีย์คําถามและมองไปที่ตัวบ่งชี้แฮช ระบบฐานข้อมูลที่ได้รับความนิยมบางอย่างที่ใช้การดัชนี hash ได้แก่: : Supports hash indexes, but they are not as commonly used as B-tree indexes. PostgreSQL MongoDB: ใช้ดัชนี hash สําหรับ sharding และเพื่อสนับสนุนคําถามความเท่าเทียมกันในฟิลด์ hashed Redis: ใช้แผนที่แฮชเป็นโครงสร้างข้อมูลหลักช่วยให้สามารถจัดเก็บและค้นหาคู่ค่าคีย์ได้อย่างมีประสิทธิภาพ การประยุกต์ใช้เหล่านี้มักใช้หลักการที่เป็นพื้นฐานของ hashing และการแก้ปัญหาการขัดแย้งที่กล่าวถึงก่อนหน้านี้ แต่ยังอาจรวมการเพิ่มประสิทธิภาพเพิ่มเติมที่เฉพาะเจาะจงในแง่มุมฐานข้อมูล การควบคุมเวอร์ชัน ระบบควบคุมเวอร์ชันเช่น Git ใช้แผนที่แฮชเพื่อจัดการการเปลี่ยนแปลงไฟล์และติดตามเวอร์ชันได้อย่างมีประสิทธิภาพ แต่ละคอมมิชชั่นใน Git ได้รับการระบุโดย hash SHA-1 ของเนื้อหาของมันซึ่งทําหน้าที่เป็นกุญแจที่ไม่ซ้ํากันสําหรับวัตถุคอมมิชชั่น สิ่งนี้ช่วยให้ Git สามารถค้นหาคอมมิชชั่นสาขาและวัตถุอื่น ๆ ในสต็อกได้อย่างรวดเร็ว Git ไม่ใช้การแก้ปัญหาการขัดแย้งของตารางแฮชแบบดั้งเดิม แต่ได้รับการออกแบบโดยใช้แนวโน้มว่าการขัดแย้งของ hash แบบเข้ารหัสลับจะไม่เกิดขึ้นในทางปฏิบัติ การนํามันทั้งหมดเข้าด้วยกัน: วิธีการประยุกต์ใช้ความรู้สําคัญ และไม่ใช่เรื่องเกี่ยวกับทฤษฎีเท่านั้น! การทําความเข้าใจว่าแผนที่แฮชจะถูกนําไปใช้อย่างไรในภาษาการเขียนโปรแกรมที่คุณเลือกสามารถนําไปสู่การปรับปรุงประสิทธิภาพอย่างมีนัยสําคัญในรหัสของคุณ For example, since Python's ใช้การแก้ไขที่เปิดด้วยการจัดการ string ที่เพิ่มประสิทธิภาพการทําความเข้าใจนี้สามารถนําไปสู่ประสิทธิภาพที่ดีขึ้น นี่คือวิธีเขียนรหัสที่มีประสิทธิภาพ vs. ไม่มีประสิทธิภาพ: dict การใช้งานที่ไม่ดี (ต่อสู้กับ Python's Dict) def count_words_bad(text): word_counts = {} words = text.split() for word in words: # This is inefficient with open addressing! if word in word_counts: # First lookup word_counts[word] += 1 # Second lookup + assignment else: word_counts[word] = 1 # Third lookup + assignment return word_counts เข้าสู่โหมดหน้าจอเต็ม Exit โหมดหน้าจอเต็ม Problems: หลาย hash lookups ต่อคํา (ถึง 3!) การตอบสนองที่เปิดทําให้การตรวจสอบที่ขาดคีย์แพง ไม่ใช้ประโยชน์จากการเพิ่มประสิทธิภาพ dict ของ Python การประยุกต์ใช้ที่ดี (ทํางานกับ Python's Dict) from collections import defaultdict, Counter def count_words_good_v1(text): # defaultdict eliminates key existence checks word_counts = defaultdict(int) words = text.split() for word in words: word_counts[word] += 1 # Single operation! return dict(word_counts) def count_words_good_v2(text): # Counter is optimized specifically for Python's dict implementation words = text.split() return Counter(words) def count_words_good_v3(text): # dict.get() with default avoids the membership test word_counts = {} words = text.split() for word in words: word_counts[word] = word_counts.get(word, 0) + 1 # Single lookup return word_counts เข้าสู่โหมดหน้าจอเต็ม Exit โหมดหน้าจอเต็ม Why These Are Better: ฟังก์ชั่น hash เดียวต่อคําแทนหลายคํา ใช้ประโยชน์จากการเพิ่มประสิทธิภาพ string ของ Python - ปุ่ม string จะได้รับการจัดการได้อย่างมีประสิทธิภาพมาก ทํางานกับที่อยู่เปิด - การดําเนินการสํารวจน้อยกว่าที่จําเป็น ใช้การเพิ่มประสิทธิภาพในตัวเช่น Counter ซึ่งปรับแต่งให้เหมาะกับการใช้งาน Python ความแตกต่างในการทํางาน การประยุกต์ใช้ที่ดีมักจะเร็วขึ้น 2-3 เท่าโดยการเข้าใจและทํางานกับการประยุกต์ใช้ Python แทนที่จะต่อต้านมัน! Typical Results: ข้อสรุป แผนที่แฮชเป็นหนึ่งในโครงสร้างข้อมูลที่พื้นฐานและมีประสิทธิภาพมากที่สุดในวิทยาศาสตร์คอมพิวเตอร์ซึ่งให้การเข้าถึงข้อมูลในเวลาเกือบคงที่ซึ่งทําให้พวกเขาเป็นสิ่งจําเป็นในการเขียนโปรแกรมที่ทันสมัย ในระหว่างการดําน้ําลึกนี้เราได้สํารวจวิธีที่พวกเขาสามารถบรรลุประสิทธิภาพ O(1) โดยเฉลี่ยที่โดดเด่นผ่านการใช้ฟังก์ชั่นแฮชที่ชาญฉลาดการแก้ปัญหาการขัดแย้งเชิงกลยุทธ์และการจัดการปัจจัยโหลดที่ระมัดระวัง ความเข้าใจที่สําคัญคือ "Magic" ของแผนที่แฮชไม่ได้เป็นความมหัศจรรย์จริงๆเลย - มันเป็นผลของอัลกอริทึมที่ออกแบบมาอย่างดีและโครงสร้างข้อมูลที่ทํางานร่วมกัน การทําความเข้าใจภายในเหล่านี้ช่วยให้เราหลีกเลี่ยงสถานการณ์ที่เลวร้ายที่สุดและเขียนโค้ดที่มีประสิทธิภาพมากขึ้น Key Takeaways: ฟังก์ชั่นแฮชเป็นพื้นฐาน - พวกเขากําหนดวิธีการกระจายข้อมูลอย่างสม่ําเสมอและส่งผลกระทบโดยตรงต่ออัตราการขัดแย้ง กลยุทธ์การแก้ปัญหาการขัดแย้งแต่ละกลยุทธ์มีข้อเสนอแนะที่แตกต่างกัน: การเชื่อมโยงเพื่อความเรียบง่ายและความแข็งแกร่งการตอบสนองแบบเปิดเพื่อประสิทธิภาพหน่วยความจําและประสิทธิภาพแคช การจัดการปัจจัยโหลดผ่าน rehashing ป้องกันการลดประสิทธิภาพเมื่อแผนที่แฮชเติบโต translates to real performance gains—understanding whether your language uses chaining or open addressing can make your code 2-3x faster Implementation knowledge ไม่ว่าคุณจะเพิ่มประสิทธิภาพสคริปต์ Python การแก้ไขปัญหาประสิทธิภาพใน Java หรือการตัดสินใจทางสถาปัตยกรรมสําหรับระบบฐานข้อมูล การทําความเข้าใจเกี่ยวกับ HashMap internals นี้จะช่วยให้คุณมีเครื่องมือในการตัดสินใจอย่างมีนัยสําคัญ เมื่อคุณใช้ระบบฐานข้อมูลครั้งต่อไป , , or คุณจะรู้ว่าสิ่งที่เกิดขึ้นภายใต้ฝาครอบและวิธีการใช้ประโยชน์สูงสุดจากโครงสร้างข้อมูลที่น่าทึ่งเหล่านี้ dict HashMap unordered_map แผนที่ Hash จริงๆ น่ากลัว - และตอนนี้คุณรู้ว่าทําไม!