หลังจากนี้เราใช้N4140 (มาตรฐาน C ++ 14)
ตาม§ 17.6.3.4 ต้องการแฮ ,
ค่าที่ส่งคืนจะขึ้นอยู่กับอาร์กิวเมนต์
k
ในช่วงเวลาของโปรแกรมเท่านั้น[หมายเหตุ: ดังนั้นการประเมินผลทั้งหมดของการแสดงออก
h(k)
ที่มีค่าเหมือนกันสำหรับk
ผลผลิตผลเดียวกันสำหรับการดำเนินการที่กำหนดของโปรแกรม - บันทึกท้าย]
และแฮชของเทมเพลตคลาส Class 20.9.12พูดว่า
...
การเริ่มต้น
hash<Key>
จะต้อง:(1.1) - ตอบสนองความต้องการของแฮช (17.6.3.4) ...
(1.2) - ...
ซึ่งหมายความว่าค่าแฮชของvalue
(เช่นhash<decltype(value)>(value)
) อาจใช้ค่าอื่นหากคุณรีสตาร์ทโปรแกรม
แต่ทำไม ข้อ จำกัด นี้ไม่ได้อยู่ในมาตรฐานของ C ++ 11 แต่อยู่ในมาตรฐานของ C ++ 14, C ++ 17 และ C ++ 20 ในฐานะผู้ใช้ (ไม่ใช่นักพัฒนา STL) มันจะค่อนข้างมีประโยชน์หากstd::hash
กำหนดไว้ มีปัญหาทางคณิตศาสตร์ในการใช้ฟังก์ชันแฮชที่กำหนดขึ้นได้หรือไม่? แต่ฟังก์ชันแฮชที่เราใช้ในชีวิตประจำวัน (เช่นเลิกใช้md5sum
หรือปลอดภัยกว่าsha256
) ล้วนแล้วแต่กำหนดไว้แล้ว มีปัญหาเรื่องประสิทธิภาพหรือไม่?