หลังจากนี้เราใช้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) ล้วนแล้วแต่กำหนดไว้แล้ว มีปัญหาเรื่องประสิทธิภาพหรือไม่?